导入如何用作用作单例模块的​​模块?

如果您将模块作为单例使用,会发生什么情况,我很困惑。

假设我有一个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.optb.py改变
  • a.py看到的变化值mod.opt
  • 奖金: a.py中的import顺序无关紧要
  • 链接地址: http://www.djcxy.com/p/54803.html

    上一篇: how do imports work for a module used as a singleton?

    下一篇: Writing to module