2012-09-03 173 views
0

SO pyton gurus!我剛剛發現了一個我不明白的驚人現象。該問題可以最好地顯示爲代碼:導入後更改模塊變量

#== 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. 由於裝載dad.py作爲__main__模塊是獨立的導入dad.py作爲dad模塊。
  2. 請參閱我的回答1.
  3. 導入__main__而不是如果你必須。但一般來說,不要嘗試這個。找到完成您的任務的另一種方式(例如課程)。

打印__name__在dad.py的頂部會說明這一點。

+0

阿哈,'__main__''是祕密!然後我將它作爲模塊運行。謝天謝地! – h2kyeong