所以pyton大师!我刚刚发现了一个我不理解的惊人现象。问题可以最好地显示为代码:
#== kid.py ==#
import dad
def spam ():
dad.spam()
#== dad.py ==#
import kid
x = 1
print "body", x
x = 2
def spam ():
print "spam", x
if __name__ == '__main__':
x = 3
spam()
kid.spam()
print "main", x
我正在使用 Python 2.7.3。你能猜出 的输出python dad.py
吗?答案是(我希望 SO 有一个扰流底纹标签)body 1 body 1 spam 3 spam 2 main 3
。那你能解释一下吗
- 为什么要
body 1
打印两次? - 怎么可能
dad.x != kid.dad.x
? - 如果我真的需要让两个模块相互导入,我该如何修改它才能
kid.dad.x
正确更新?