Python 导入后更改模块变量

Python 导入后更改模块变量,python,python-2.7,import,circular-reference,Python,Python 2.7,Import,Circular Reference,所以,派顿大师!我刚刚发现了一个我不理解的惊人现象。问题最好以代码形式显示: #== 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()

所以,派顿大师!我刚刚发现了一个我不理解的惊人现象。问题最好以代码形式显示:

#== 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的输出吗?答案是(我希望有一个扰流板阴影标签)
body 1 body 1 spam 3 spam 2 main 3
。你能解释一下吗

  • 为什么正文1要打印两次
  • 怎样才能
    dad.x!=kid.dad.x
    be
  • 如果我真的需要让这两个模块相互导入,我如何修改它以获得适当更新的
    kid.dad.x
  • 因为加载dad.py作为
    \uuuu主模块
    独立于导入dad.py作为
    dad
    模块
  • 见我对1的回答
  • 如果必须,请导入
    \uuuuu main\uuuuu
    。但总的来说,不要尝试这个。找到完成任务的另一种方法(例如上课)
  • 在dad.py顶部打印
    \uuuuu name\uuuuuuu
    将说明这一点

  • 因为加载dad.py作为
    \uuuu主模块
    独立于导入dad.py作为
    dad
    模块
  • 见我对1的回答
  • 如果必须,请导入
    \uuuuu main\uuuuu
    。但总的来说,不要尝试这个。找到完成任务的另一种方法(例如上课)

  • 在dad.py顶部打印
    \uuuuu name\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!然后我将它作为模块运行。谢天谢地!哈哈,
    \uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu!然后我将它作为模块运行。谢天谢地!