`import` 会在 Python 中产生运行时负担吗?
Does `import` incur a runtime burden in Python?
是否有理由避免本地化导入?
由于我是 Python 的新手,除了我的编辑 PyCharm 建议的做法外,我对好的和坏的做法没有很好的直觉。
我一直在做的一件事是本地化 import
语句,例如下面显示的代码。我假设这样的 import
只是给编译器的消息,而不是给 运行 时间的消息,并且它确保没有额外的 运行 时间开销。如果有 运行 时间开销,将 from ... import...
从函数定义中移到顶层可能会更好。
def conversion8(self):
from genus_types import notp
for a in self.tds:
for n in self.tds:
if notp(n) and self.annihilator(a, n.s):
return self.zero()
return self
import
statement在运行时执行。它有两个不同的用途:
- 将目标模块加载到模块缓存中如果尚未加载
- 将请求的对象从模块名称绑定到当前范围
所以只要在正常执行过程中遇到import
,就会有运行次的开销。但是,加载模块的大量开销通常只在第一次发生。
由于模块缓存是可访问的(通过sys.modules
),原则上一个模块可以从缓存中逐出并多次加载。对于通常的模块,这在实践中不会发生。
将导入移动到函数通常是为了仅在需要时有条件地导入模块,或打破循环导入。除非确实需要,否则 it is idiomatic to place imports at the top of modules.
是的,导入会产生运行时成本。在许多情况下,它可以忽略不计,但不一定。假设您有以下 __init__.py
:
import time
time.sleep(60)
通过导入此模块,您必然会产生 60 秒的运行时间成本。虽然这个特定案例不现实,但其他类似的事情可能是(初始化昂贵的资源、连接等)
出于这个原因(除了其他原因,例如圆形或非便携式进口),有时本地进口更可取。除非你有充分的理由本地化导入,否则我建议遵循 PEP8。
是否有理由避免本地化导入?
由于我是 Python 的新手,除了我的编辑 PyCharm 建议的做法外,我对好的和坏的做法没有很好的直觉。
我一直在做的一件事是本地化 import
语句,例如下面显示的代码。我假设这样的 import
只是给编译器的消息,而不是给 运行 时间的消息,并且它确保没有额外的 运行 时间开销。如果有 运行 时间开销,将 from ... import...
从函数定义中移到顶层可能会更好。
def conversion8(self):
from genus_types import notp
for a in self.tds:
for n in self.tds:
if notp(n) and self.annihilator(a, n.s):
return self.zero()
return self
import
statement在运行时执行。它有两个不同的用途:
- 将目标模块加载到模块缓存中如果尚未加载
- 将请求的对象从模块名称绑定到当前范围
所以只要在正常执行过程中遇到import
,就会有运行次的开销。但是,加载模块的大量开销通常只在第一次发生。
由于模块缓存是可访问的(通过sys.modules
),原则上一个模块可以从缓存中逐出并多次加载。对于通常的模块,这在实践中不会发生。
将导入移动到函数通常是为了仅在需要时有条件地导入模块,或打破循环导入。除非确实需要,否则 it is idiomatic to place imports at the top of modules.
是的,导入会产生运行时成本。在许多情况下,它可以忽略不计,但不一定。假设您有以下 __init__.py
:
import time
time.sleep(60)
通过导入此模块,您必然会产生 60 秒的运行时间成本。虽然这个特定案例不现实,但其他类似的事情可能是(初始化昂贵的资源、连接等)
出于这个原因(除了其他原因,例如圆形或非便携式进口),有时本地进口更可取。除非你有充分的理由本地化导入,否则我建议遵循 PEP8。