0

所以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。那你能解释一下吗

  1. 为什么要body 1打印两次?
  2. 怎么可能dad.x != kid.dad.x
  3. 如果我真的需要让两个模块相互导入,我该如何修改它才能kid.dad.x正确更新?
4

1 回答 1

4
  1. 因为将 dad.py 作为模块加载与将__main__dad.py 作为模块导入是独立的dad
  2. 请参阅我对 1 的回答。
  3. __main__如果必须,请改为导入. 但总的来说,不要尝试这个。寻找另一种方式来完成您的任务(例如课程)。

__name__在 dad.py 的顶部打印将说明这一点。

于 2012-09-03T05:31:15.050 回答