作为序言,我想我可能已经想出了如何让这段代码工作(基于在import 之后更改模块变量),但我的问题实际上是关于为什么会发生以下行为,所以我可以理解将来不应该做什么。
我有三个文件。第一个是 mod1.py:
# mod1.py
import mod2
var1A = None
def func1A():
global var1
var1 = 'A'
mod2.func2()
def func1B():
global var1
print var1
if __name__ == '__main__':
func1A()
接下来我有 mod2.py:
# mod2.py
import mod1
def func2():
mod1.func1B()
最后我有driver.py:
# driver.py
import mod1
if __name__ == '__main__':
mod1.func1A()
如果我执行命令python mod1.py
,那么输出是None
. 根据我上面引用的链接,mod1.py
导入为__main__
和mod1.py
导入自mod2.py
. 因此,我创建了driver.py
. 如果我执行命令python driver.py
,那么我会得到预期的输出:A
. 我有点看到差异,但我并没有真正看到机制或原因。这是如何以及为什么会发生的?同一个模块会存在两次似乎违反直觉。如果我执行python mod1.py
,是否可以访问__main__
版本中mod1.py
的变量而不是导入的版本中的变量mod2.py
?