wim*_*wim 19 python import scope module function
哪种风格更好?
风格A:
def foo():
import some_module
some_module.something
Run Code Online (Sandbox Code Playgroud)
风格B:
import some_module
def foo():
some_module.something
Run Code Online (Sandbox Code Playgroud)
假设some_module 代码中的其他地方没有使用,只在此函数内部使用.
tor*_*rek 32
实际上,正如已经指出的那样,通常最好遵循PEP 8的建议并在顶部进行进口.但也有一些例外.理解它们的关键在于你的第二段中的嵌入式问题:"在什么阶段导入......会发生什么?"
Import实际上是一个可执行语句.导入模块时,模块中的所有可执行语句都会运行."def"也是一个可执行的陈述; 它的执行导致定义的名称与(已编译的)代码相关联.所以如果你有:
def f():
import something
return None
Run Code Online (Sandbox Code Playgroud)
在您导入的模块中,(编译的)import和return语句在该点与名称"f"相关联.运行 f()时,会运行 import语句.
如果你推迟导入"非常大"或"重"的东西,然后你永远不会运行该函数(在这种情况下为f),则导入永远不会发生.这节省了时间(以及一些空间).当然,一旦你实际调用f(),就会发生导入(如果Python使用缓存结果时已经发生了,但它仍然需要检查),这样你就失去了时间优势.
因此,根据经验,"在顶部导入所有内容"直到您完成大量分析并发现导入"巨大的东西"在90%的运行中浪费了大量时间,而节省了一点时间其中10%.
| 归档时间: |
|
| 查看次数: |
5284 次 |
| 最近记录: |