导入语句应该始终位于模块的顶部吗?

导入语句应该始终位于模块的顶部吗?

Pep 08各国:

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

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

这不是:

class SomeClass(object):

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

比这个更有效率?

from datetime import datetimeclass SomeClass(object):

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


LEATH
浏览 641回答 3
3回答

白板的微信

我采用的做法是将所有导入放在使用它们的函数中,而不是放在模块的顶部。我得到的好处是能够更可靠地重构。当我将一个函数从一个模块移到另一个模块时,我知道该函数将继续与它的所有遗留测试完整地一起工作。如果我的导入位于模块的顶部,当我移动一个函数时,我会发现我最终花费了大量的时间来完成新模块的导入。重构IDE可能会使这一点变得无关紧要。正如其他地方所提到的,有一个速度惩罚。我在我的申请中测量了这一点,发现它对我的目的来说是微不足道的。能够在不诉诸搜索的情况下看到所有模块依赖项(例如grep)也是很好的。但是,我关心模块依赖关系的原因通常是因为我正在安装、重构或移动包含多个文件的整个系统,而不仅仅是一个模块。在这种情况下,我无论如何要执行一个全局搜索,以确保我有系统级的依赖项。因此,我没有找到全球进口来帮助我理解实践中的一个体系。我通常把进口sys内部if __name__=='__main__'检查并传递参数(如sys.argv[1:])main()功能。这让我可以用main在这样的情况下sys还没有进口。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python