Python-导入语句是否应该始终位于模块的顶部?

发布于 2021-02-02 23:20:37

导入总是放在文件的顶部,紧随任何模块注释和文档字符串之后,以及模块全局变量和常量之前。

但是,如果我要导入的类/方法/函数仅在极少数情况下使用,那么确定在需要时进行导入肯定会更有效吗?

这不是吗?

class SomeClass(object):

    def not_often_called(self)
        from datetime import datetime
        self.datetime = datetime.now()

比这更有效?

from datetime import datetime

class SomeClass(object):

    def not_often_called(self)
        self.datetime = datetime.now()
关注者
0
被浏览
255
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    模块导入非常快,但不是即时的。这意味着:

    • 将导入放在模块顶部很好,因为这是微不足道的成本,只需要支付一次即可。
    • 将导入放在函数中将导致对该函数的调用花费更长时间。
      因此,如果你关心效率,则将进口放在首位。仅在你的剖析显示有帮助的情况下,才将它们移入函数中(你进行了剖析以查看最能改善性能的地方,对吗?)

    我见过执行延迟导入的最佳原因是:

    • 可选的库支持。如果你的代码具有使用不同库的多个路径,则在未安装可选库的情况下不要中断。
    • __init__.py插件的中,可能已导入但并未实际使用。例如Bazaar插件,它使用bzrlib的延迟加载框架。


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看