哪种风格更可取?
样式 A:
def foo():
import some_module
some_module.something
样式 B:
import some_module
def foo():
some_module.something
假设 some_module
没有在代码的其他地方使用,只在这个函数内部使用。
最佳答案
确实,如前所述,通常最好遵循 PEP 8 建议并在顶部进行导入。不过也有一些异常(exception)。理解它们的关键在于您在第二段中嵌入的问题:“导入在什么阶段......发生?”
Import 实际上是一个可执行语句。导入模块时,模块中的所有可执行语句都会运行。 “def”也是一个可执行语句;它的执行导致定义的名称与(已编译的)代码相关联。所以如果你有:
def f():
import something
return None
在您导入的模块中,(已编译的)导入和返回语句此时与名称“f”相关联。当您运行 f() 时,那里的 import 语句就会运行。
如果您推迟导入“非常大”或“重”的内容,然后您从未运行该函数(在本例中为 f),则导入永远不会发生。这节省了时间(也节省了一些空间)。当然,一旦你真正调用了 f(),导入就会发生(如果 Python 使用缓存结果时它已经发生了,但它仍然需要检查),所以你失去了时间优势。
因此,根据经验,“在顶部导入所有内容”,直到您完成大量分析并发现导入“巨大”在 90% 的运行中浪费大量时间,而不是节省其中 10% 的时间很少。
关于python - 在模块级别或功能级别导入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9614051/