如果你把模块作为一个单独的模块,我会感到困惑。
假设我有一个模块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'?
我相信(但如果我错了,请纠正我)导入总是通过引用引用,而不是通过值引用?而且我猜这就是上述问题归结为的。
答案 0 :(得分:1)
试一试,看看:
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
import
中a.py
s的顺序无关紧要