关于python:为什么将import语句放在函数中并不常见?

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

本问题已经有最佳答案,请猛点这里访问。

我正在维护一些python包,在依赖性不完全满足的系统上,可能会因全局范围导入而失效的功能:

1
2
3
4
5
6
7
8
9
import numpy as np

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

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

例如,这里我不能使用lala(),如果我没有numpy,即使lala没有numpy。当然,理想情况下依赖关系将被正确地管理,但是,如果函数只有在必须失败时才会失败,那么它将使包更加健壮。

在函数范围内几乎从不进行导入有什么原因吗?这是因为减少了生产线的数量吗?


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

原因是您通常希望尽早检测到错误。一个函数只能在一段时间后调用,所以在函数内部导入时,您可以有一个似乎可以工作的程序,但在运行时的某个时刻失败。当这些失败经过长时间的计算后,或者在客户的网站上进行生产时,这些失败是特别坏的消息,最好避免。

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