首页 > 解决方案 > 在 python 的循环中导入某些东西有什么副作用?

问题描述

我一直在维护一个项目。我发现有人写了一个函数,他在 for 循环中做了一个 import 语句,就像这样

for obj in obj_list:
    from Levenshtein._levenshtein import distance
    if distance(obj.title, "some string") <= 2:
        do something

我假设在 for 循环中导入某些内容会导致不必要的指令执行。因此,我想重构代码。但要做到这一点,我需要一个理由来支持我的假设,即在 for 循环中导入不是一个好习惯。我的假设正确吗?

标签: pythonpython-3.xfor-looppython-import

解决方案


只需将其import移出循环即可。您是正确的,因为这会导致 Python 每次迭代都需要做一些额外的工作。

Pythonimport语句做了两件事:

  • 检查引用的模块是否已经加载,如果没有,加载它。
  • 绑定(分配)一个或多个名称。

所以每次循环迭代Python都会检查模块是否已经加载(大致相当于检查'Levenshtein._levenshtein' in sys.modules),然后设置名称distance

如果循环中没有其他内容distance将名称设置为其他任何内容,您可以安全地将导入移出循环并保存这些检查。如果有这样的代码,则将其重构为不使用相同的名称,并将导入移出循环。


推荐阅读