导入如何用作用作单例模块的模块?
如果您将模块作为单例使用,会发生什么情况,我很困惑。
假设我有一个conf.py模块,其中包含一些需要由多个其他文件访问的配置参数。 在conf.py中,我可能有这段代码(而没有其他):
myOption = 'foo' + 'bar'
如果我现在先在a.py中导入它,然后在b.py中导入,我的理解是第一次导入时(在a.py中),字符串连接将被执行。 但是第二次导入时(在b.py中),conf.myOption已经有了它的值,所以不会执行字符串连接。 它是否正确?
如果在完成这两个导入之后,我在b.py中执行以下内容
conf.myOption = 'aDifferentFoobar'
那么显然b.py现在会看到这个新值。 a.py会看到相同的值,还是会看到'foobar'?
我相信(但纠正我,如果我错了),进口总是通过引用,而不是价值来引用? 我猜这就是以上问题归结到的。
试试看看:
mod.py
:
def foo():
print("in foo()")
return "foo"
bar = foo()
opt = "initial"
b.py
:
import mod
mod.opt = "changed"
a.py
:
import mod
import b
print(mod.bar)
print(mod.opt)
执行a.py
:
$ python3.4 a.py
输出:
in foo()
foo
changed
我们学习:
foo()
只执行一次 mod.opt
由b.py
改变 a.py
看到的变化值mod.opt
a.py
中的import
顺序无关紧要 上一篇: how do imports work for a module used as a singleton?
下一篇: Writing to module