これは単純なスコープに関する質問かもしれません。Python ファイル (モジュール) 内の次のコードは、少しわかりにくいです。
if __name__ == '__main__':
x = 1
print x
x
私がこれまで扱った他の言語では、変数はステートメントに対してローカルであり、ステートメントの外部には存在してはならないため、このコードは例外をスローしますif
。しかし、このコードは実行され、1 を出力します。この動作を説明できる人はいますか? モジュール内で作成されたすべての変数はグローバルで、モジュール全体で使用可能ですか?
ベストアンサー1
Python 変数のスコープは、割り当てられている最も内側の関数、クラス、またはモジュールに限定されます。 やif
ブロックなどの制御ブロックはwhile
カウントされないため、 内で割り当てられた変数のスコープは、if
関数、クラス、またはモジュールに限定されます。
(ジェネレータ式またはリスト/セット/辞書の理解によって定義された暗黙的な関数は、ラムダ式と同様にカウントされます。これらには代入ステートメントを詰め込むことはできませんが、ラムダ パラメーターとfor
句のターゲットは暗黙的な代入です。)