python - 在 python 的循环中导入某些东西有什么副作用?
问题描述
我一直在维护一个项目。我发现有人写了一个函数,他在 for 循环中做了一个 import 语句,就像这样
for obj in obj_list:
from Levenshtein._levenshtein import distance
if distance(obj.title, "some string") <= 2:
do something
我假设在 for 循环中导入某些内容会导致不必要的指令执行。因此,我想重构代码。但要做到这一点,我需要一个理由来支持我的假设,即在 for 循环中导入不是一个好习惯。我的假设正确吗?
解决方案
只需将其import
移出循环即可。您是正确的,因为这会导致 Python 每次迭代都需要做一些额外的工作。
Pythonimport
语句做了两件事:
- 检查引用的模块是否已经加载,如果没有,加载它。
- 绑定(分配)一个或多个名称。
所以每次循环迭代Python都会检查模块是否已经加载(大致相当于检查'Levenshtein._levenshtein' in sys.modules
),然后设置名称distance
。
如果循环中没有其他内容distance
将名称设置为其他任何内容,您可以安全地将导入移出循环并保存这些检查。如果有这样的代码,则将其重构为不使用相同的名称,并将导入移出循环。
推荐阅读
- reactjs - 在自定义输入字段 React-Final-Form-Arrays 上键入时失去焦点
- bash - 为什么我的递归 for 循环不断重复列表中的第一项?
- scala - 读取最后一个增量分区而不读取所有增量
- python - Python嵌套字典不断写所有的kay值
- javascript - 有没有办法从执行函数的范围中获取变量?
- html - 我正在尝试将我的 HTML 导航栏固定到顶部,但如果我这样做,横幅的某些部分会被隐藏。我该怎么办?
- python - AND 与 OR 与熊猫中的日期时间
- nosql - 不断增长的 NoSQL 集群中的恒定复制因子
- ruby - 带有整数的Ruby while循环
- java - 将子对象分配给父对象