import
其他答案对真正的工作原理表现出轻微的困惑。
这个说法:
import foo
大致相当于这个说法:
foo = __import__('foo', globals(), locals(), [], -1)
也就是说,它在当前范围内创建一个与请求的模块同名的变量,并将__import__()
使用该模块名称和一大堆默认参数调用的结果分配给它。
__import__()
函数句柄在概念上将字符串 ( )'foo'
转换为模块对象。模块缓存在 中sys.modules
,这是第一个__import__()
看起来 - 如果 sys.modules 有一个条目'foo'
,那__import__('foo')
将返回,无论它是什么。它真的不在乎类型。您可以亲自看到这一点;尝试运行以下代码:
import sys
sys.modules['boop'] = (1, 2, 3)
import boop
print boop
暂时不考虑风格问题,在函数中使用 import 语句可以满足您的需求。如果该模块以前从未被导入过,它会被导入并缓存在 sys.modules 中。然后它将模块分配给具有该名称的局部变量。它不会不修改任何模块级状态。它确实可能会修改一些全局状态(向 sys.modules 添加一个新条目)。
也就是说,我几乎从不import
在函数内部使用。如果导入模块会在您的程序中造成明显的减速——比如它在静态初始化中执行长时间的计算,或者它只是一个庞大的模块——并且你的程序实际上很少需要模块来做任何事情,那么只在内部进行导入就很好了使用它的功能。(如果这令人反感,Guido 会跳进他的时间机器并更改 Python 以阻止我们这样做。)但作为一项规则,我和一般 Python 社区将我们所有的 import 语句放在模块范围内的模块顶部。