为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

LEATH 2019-06-26 15:47:17
导入语句应该始终位于模块的顶部吗?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()
查看完整描述

3 回答

?
白板的微信

TA贡献1883条经验 获得超3个赞

我采用的做法是将所有导入放在使用它们的函数中,而不是放在模块的顶部。

我得到的好处是能够更可靠地重构。当我将一个函数从一个模块移到另一个模块时,我知道该函数将继续与它的所有遗留测试完整地一起工作。如果我的导入位于模块的顶部,当我移动一个函数时,我会发现我最终花费了大量的时间来完成新模块的导入。重构IDE可能会使这一点变得无关紧要。

正如其他地方所提到的,有一个速度惩罚。我在我的申请中测量了这一点,发现它对我的目的来说是微不足道的。

能够在不诉诸搜索的情况下看到所有模块依赖项(例如grep)也是很好的。但是,我关心模块依赖关系的原因通常是因为我正在安装、重构或移动包含多个文件的整个系统,而不仅仅是一个模块。在这种情况下,我无论如何要执行一个全局搜索,以确保我有系统级的依赖项。因此,我没有找到全球进口来帮助我理解实践中的一个体系。

我通常把进口sys内部if __name__=='__main__'检查并传递参数(如sys.argv[1:])main()功能。这让我可以用main在这样的情况下sys还没有进口。


查看完整回答
反对 回复 2019-06-26
  • 3 回答
  • 0 关注
  • 639 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信