gpt4 book ai didi

python - 在模块级别或功能级别导入?

转载 作者:IT老高 更新时间:2023-10-28 20:51:17 26 4
gpt4 key购买 nike

哪种风格更可取?

样式 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com