Python 对于用作单例的模块,导入如何工作?
我很困惑如果你把一个模块作为一个单体来处理会发生什么 假设我有一个模块conf.py,其中包含一些需要由多个其他文件访问的配置参数。在conf.py中,我可能有以下代码(没有其他代码): 如果我现在先在a.py中导入它,然后在b.py中导入它,我的理解是第一次导入它时(在a.py中),将执行字符串连接。但是第二次导入时(在b.py中),conf.myOption已经有了它的值,因此不会执行字符串连接。这是正确的吗 如果在完成这两个导入之后,我将在b.py中执行以下操作Python 对于用作单例的模块,导入如何工作?,python,Python,我很困惑如果你把一个模块作为一个单体来处理会发生什么 假设我有一个模块conf.py,其中包含一些需要由多个其他文件访问的配置参数。在conf.py中,我可能有以下代码(没有其他代码): 如果我现在先在a.py中导入它,然后在b.py中导入它,我的理解是第一次导入它时(在a.py中),将执行字符串连接。但是第二次导入时(在b.py中),conf.myOption已经有了它的值,因此不会执行字符串连接。这是正确的吗 如果在完成这两个导入之后,我将在b.py中执行以下操作 conf.myOption
conf.myOption = 'aDifferentFoobar'
显然,b.py现在会看到这个新值。py会看到相同的值,还是仍然会看到“foobar”
我相信(如果我错了,请纠正我)进口总是通过参考而不是价值来参考的?我猜这就是上面这些问题的原因。试试看:
mod.py
:
def foo():
print("in foo()")
return "foo"
bar = foo()
opt = "initial"
import mod
mod.opt = "changed"
import mod
import b
print(mod.bar)
print(mod.opt)
$ python3.4 a.py
b.py
:
def foo():
print("in foo()")
return "foo"
bar = foo()
opt = "initial"
import mod
mod.opt = "changed"
import mod
import b
print(mod.bar)
print(mod.opt)
$ python3.4 a.py
a.py
:
def foo():
print("in foo()")
return "foo"
bar = foo()
opt = "initial"
import mod
mod.opt = "changed"
import mod
import b
print(mod.bar)
print(mod.opt)
$ python3.4 a.py
执行a.py
:
def foo():
print("in foo()")
return "foo"
bar = foo()
opt = "initial"
import mod
mod.opt = "changed"
import mod
import b
print(mod.bar)
print(mod.opt)
$ python3.4 a.py
输出:
in foo()
foo
changed
我们了解到:
只执行一次foo()
由mod.opt
b.py
查看a.py
mod.opt
- 额外好处:在
中导入a.py
s的顺序无关紧要