多次导入模块有多安全?

Ale*_*lex 8 python

我一直在想这个问题:保证多次导入模块是否安全?当然,如果模块执行操作系统之类的东西,比如写入文件或其他东西,那么可能不会,但对于大多数简单的模块,只是简单地执行导入是安全的吗?是否存在控制模块全局状态的约定?

nne*_*neo 23

是的,您可以import module在一个Python程序中使用多次,无论它是什么模块.import在第一次访问缓存模块之后的每个后续操作,而不是重新评估它.

  • 你可以在`sys.modules`中看到缓存的模块. (5认同)

Jun*_*uxx 5

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

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

for i in range(10000):
    exec("foo%i.getcwd()" % i)
Run Code Online (Sandbox Code Playgroud)

随着进口的不同类别:

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

两者运行都没有问题。当然不能保证,但是至少看来您没有遇到直接的实际问题。

  • 我想说,即使你认为你确定知道,测试一下也没什么坏处。 (5认同)
  • @nneonneo:当然可以,但是如果您不确定,测试永远不会受伤,对吗? (3认同)
  • 嗯,这是有充分理由的……这是设计使然。 (2认同)