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

Python2.7.3を使用しています。の出力を推測できますかpython dad.py?答えは(SOにスポイラーシェーディングタグがあればいいのに)body 1 body 1 spam 3 spam 2 main 3です。だからあなたは説明できますか

  1. なぜbody 12回印刷されるのですか?
  2. どうすればdad.x != kid.dad.xいいですか?
  3. 2つのモジュールを相互にインポートする必要がある場合、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 に答える