1. ホーム
  2. python

[解決済み] if文の中で初期化された変数のスコープとは?

2022-03-16 01:47:26

質問

Python初心者なので、おそらく単純なスコープに関する質問だと思います。Pythonのファイル(モジュール)内の次のコードが私を少し混乱させています。

if __name__ == '__main__':
    x = 1

print x

私がこれまで使ってきた他の言語では、このコードは例外を投げることになります。 x 変数は if 文の外には存在しないはずです。しかし、このコードは実行され、1が表示されます。どなたかこの挙動を説明できる方はいらっしゃいますか?モジュール内で作成されたすべての変数は、モジュール全体から利用可能なグローバル変数なのでしょうか?

解決方法は?

Pythonの変数は、代入された一番内側の関数、クラス、モジュールにスコープされます。のような制御ブロックは ifwhile ブロックの中で代入された変数はカウントされません。 if は、関数、クラス、モジュールにスコープされたままです。

(ジェネレータ式またはリスト/セット/ディクショナリ内包で定義される暗黙の関数 する がカウントされ、ラムダ式もカウントされます。代入文は入れられませんが、ラムダパラメータと for 節のターゲットは暗黙の代入です)。