哪种风格更可取?
Style A:
def foo():
import some_module
some_module.something
Style B:
import some_module
def foo():
some_module.something
假使,假设some_module
不在代码的其他地方使用,仅在该函数内使用。
事实上,正如已经指出的,通常最好遵循 PEP 8 建议并在顶部进行导入。但也有一些例外。理解它们的关键在于第二段中嵌入的问题:“导入......发生在什么阶段?”
import实际上是一个可执行语句。当您导入模块时,该模块中的所有可执行语句都会运行。 “def”也是一个可执行语句;它的执行导致定义的名称与(已编译的)代码关联。所以如果你有:
def f():
import something
return None
在您导入的模块中,(已编译的)导入和返回语句此时与名称“f”相关联。当你runf(),那里的 import 语句运行。
如果您推迟导入“非常大”或“重”的东西,然后您从未运行该函数(在本例中为 f),则导入永远不会发生。这节省了时间(也节省了一些空间)。当然,一旦你实际调用 f(),导入就会发生(如果 Python 使用缓存结果时已经发生了导入,但它仍然需要检查),所以你失去了时间优势。
因此,根据经验,“在顶部导入所有内容”,直到您完成大量分析并发现导入“巨大”在 90% 的运行中浪费了大量时间,而不是在其中10%。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)