16

我一直在想这个问题:多次导入模块是否保证安全?当然,如果模块执行诸如写入文件之类的操作系统操作,那么可能不会,但是对于大多数简单模块来说,简单地执行导入是否安全?是否有管理模块全局状态的约定?

4

2 回答 2

36

是的,你可以import module在一个 Python 程序中任意多次,无论它是什么模块。第一个之后的每个后续都import访问缓存的模块而不是重新评估它。

于 2012-09-19T02:01:11.103 回答
9

以一万个不同的名称导入 os 模块似乎没有任何问题。

for i in range(10000):
    exec("import os as foo%i" % i)

for i in range(10000):
    exec("foo%i.getcwd()" % i)

随着不同类别的进口:

for i in range(10000):
    exec("""class FooClass%i:
    import os as foo%i
    print foo%i.getcwd()""" % (i,i,i))

两者都运行没有问题。当然不是保证,但至少看起来你不会立即遇到实际问题。

于 2012-09-19T02:05:54.907 回答