python - `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
解决方案
该import
语句在运行时执行。它有两个不同的目的:
- 如果尚未加载目标模块,则将其加载到模块缓存中
- 将模块中请求的对象名称绑定到当前范围
因此,每当import
在正常执行期间遇到 an 时,都会产生运行时开销。然而,加载模块的巨大开销通常只在第一次发生。
由于模块缓存是可访问的(通过sys.modules
),原则上一个模块可能会从缓存中被逐出并多次加载。对于通常的模块,这在实践中不会发生。
将导入移动到函数通常是为了仅在需要时有条件地导入模块,或者中断循环导入。除非确实需要这样做,否则将导入放在 modules 的顶部是惯用的。
推荐阅读
- google-apps-script - Google 表单上传 + 在自动电子邮件回复中附加上传的 pdf
- android-jetpack-compose - 我如何模拟视图模型以使用撰写预览?
- r - 在 geom_bar() 中突出显示具有非常特定条件的框
- c# - 找不到路径“D:\home\site\wwwroot\DriverImage\image.jfif”的一部分
- python - 如何使用 sphinx 文档在 Confluence 中构建多个页面
- python - 使用 pandas (Python) 从 csv 更新用户选择的单元格
- java - 检测各种类型的不区分大小写的重复项时的 Java 收集器流过滤器和 .toMap
- python - 具有多个条件的 pandas DataFrame 中的数据条件选择
- node.js - 当用户通过输入 URL 直接访问时,具有 Firebase Cloud 功能的 Angular SSR 始终返回 404
- python - Python MySQL 无法处理参数错误