if文で初期化された変数のスコープは何ですか? 質問する

if文で初期化された変数のスコープは何ですか? 質問する

これは単純なスコープに関する質問かもしれません。Python ファイル (モジュール) 内の次のコードは、少しわかりにくいです。

if __name__ == '__main__':
    x = 1
    
print x

x私がこれまで扱った他の言語では、変数はステートメントに対してローカルであり、ステートメントの外部には存在してはならないため、このコードは例外をスローしますif。しかし、このコードは実行され、1 を出力します。この動作を説明できる人はいますか? モジュール内で作成されたすべての変数はグローバルで、モジュール全体で使用可能ですか?

ベストアンサー1

Python 変数のスコープは、割り当てられている最も内側の関数、クラス、またはモジュールに限定されます。 やifブロックなどの制御ブロックはwhileカウントされないため、 内で割り当てられた変数のスコープは、if関数、クラス、またはモジュールに限定されます。

(ジェネレータ式またはリスト/セット/辞書の理解によって定義された暗黙的な関数は、ラムダ式と同様にカウントされます。これらには代入ステートメントを詰め込むことはできませんが、ラムダ パラメーターとfor句のターゲットは暗黙的な代入です。)

おすすめ記事