为什么将 import 语句放在函数内部并不常见?

Why is it uncommon for import statements to be placed inside functions?

我正在维护一些 Python 包,在依赖性未完全满足的系统上,原本可能有效的功能因全局范围导入而失败:

import numpy as np

def lala(in):
    out = max(in)
    return out

def fufu(in):
    out = np.mean(in)
    return out

例如,如果我没有 numpy,即使 lala 不使用 numpy,我也不能使用 lala()。 当然,理想情况下,依赖关系会得到正确管理,不过,如果函数仅在它们不得不失败时才失败,那么它会产生一个更健壮的包。

为什么导入几乎从不在函数范围内完成,有什么原因吗?这个原因只是减少行数吗?

Is there any reason why imports are almost never done in function scope?

原因是您通常希望尽早检测到错误。一个函数可能只会在一段时间后被调用,所以通过在函数内部导入,你可以让一个程序 看起来 可以工作,只是在 run-time 的某个时候失败。当经过长时间计算或在客户现场的生产中使程序崩溃时,此类故障尤其是坏消息,最好避免。

如果功能设计为可选,则以上内容不适用。在这种情况下,在函数内部导入是非常合适的,可能会捕获 ImportError 并将其重新引发为业务异常。