导入语句的位置

5
我注意到很多时候 import mod 语句可以紧贴着 mod.something() 的调用语句。虽然我发现通常开发者们会把 import 语句放在源文件的开头。这么做有什么好处吗?
有些模块中我只需要用其中几个函数,在特定位置进行调用。在我看来,将 import 语句紧贴着函数调用会更美观一些。
例如:
# middle of the source file
import mod
mod.something()

你会推荐什么,为什么呢?

8
PEP风格指南要求所有的导入都在模块开头进行。这样做可以让人们更容易地了解你的模块有哪些依赖,而无需搜索整个源文件。 - g.d.d.c
2
请参阅PEP 8中的“导入”部分。这是一个风格问题,所以请随意按照您认为最有用的方式进行操作,但请记住,与您的代码一起工作的其他人可能希望将导入放在前面。(我认为这个问题没有真正的答案,因此投票关闭。) - Sven Marnach
好的,我理解了,两种风格都有其原因。我更喜欢在开头不要有一堆导入,但是不这样做的原因也很充分。 - xralf
2个回答

6

导入一个模块仅在调用该模块的函数/使用该模块的类之前,可以有助于提高性能:有时候初始化一个模块可能会很耗费时间,因为例如它需要加载和初始化一个本地库。如果不总是调用模块中的代码,推迟导入该模块直到最后一刻可能是个好主意。


1
好的理由。实际上,我只从几个模块中使用一个函数,因此不想在开头导入许多小助手来使代码混乱。 - xralf

5

我不妨将我的评论移到这里作为答案,但感觉有点多余。

PEP样式指南要求所有导入都在模块开头进行。这样可以更容易地让人们知道您的模块有哪些依赖关系,而无需深入查看整个源文档。

需要注意的是-在很少的情况下,导入可能会引起错误(循环导入是最好的例子),因此您可以在使用某些功能之前立即导入。 一般来说,这是不好的做法。 如果您必须在模块其他位置导入,则通常表示存在设计缺陷。


你的回答很有帮助,让结果更加完整,谢谢。 - xralf

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接