作为序言,我想我可能已经想出了如何让这段代码工作(基于在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?