首页 > 解决方案 > `import` 是否会在 Python 中产生运行时负担?

问题描述

是否有理由避免本地化进口?

由于我对 Python 还很陌生,除了我的编辑 PyCharm 建议的那些,我对好的和坏的做法没有很好的直觉。

我一直在做的一件事是本地化import语句,例如下面显示的代码。我假设这样的 animport只是给编译器的消息,而不是给运行时的消息,并且它确保没有额外的运行时开销。如果存在运行时开销,那么将from ... import...函数定义中的 out 移到顶层可能会更好。

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

标签: pythonpython-3.xpython-import

解决方案


import语句在运行时执行。它有两个不同的目的:

  • 如果尚未加载目标模块,则将其加载到模块缓存中
  • 将模块中请求的对象名称绑定到当前范围

因此,每当import在正常执行期间遇到 an 时,都会产生运行时开销。然而,加载模块的巨大开销通常只在第一次发生。

由于模块缓存是可访问的(通过sys.modules),原则上一个模块可能会从缓存中被逐出并多次加载。对于通常的模块,这在实践中不会发生。

将导入移动到函数通常是为了仅在需要时有条件地导入模块,或者中断循环导入。除非确实需要这样做,否则将导入放在 modules 的顶部是惯用的


推荐阅读