2012-09-03 4 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 be?
  3. Если мне действительно нужно, чтобы оба модуля импортировали друг друга, как я могу его изменить, чтобы правильно обновить kid.dad.x?

ответ

4
  1. Поскольку нагрузка dad.py как __main__ модуль не зависит от импорта dad.py как dad модуля.
  2. Смотрите мой ответ на 1.
  3. Импорт __main__ вместо этого, если вам необходимо. Но в общем, не пробуйте это. Найдите другой способ выполнения своих задач (например, классов).

Печать __name__ в верхней части dad.py проиллюстрирует это.

+0

A-ha, '' __main__'' был секретом! Тогда я запустил его как модуль. Спасибо, небеса! – h2kyeong

Смежные вопросы