クロージャの非バインド ローカル変数エラーについて理解する
クロージャを使用してコードを記述する場合、変数のスコープを考慮することが重要です。この特定のケースでは、なぜ次のコードで UnboundLocalError が発生するのかという疑問が生じます:
counter = 0 def increment(): counter += 1 increment()
この疑問に答えるには、まず Python のクロージャーの概念を理解する必要があります。クロージャは、スコープが終了した後でも、それが定義されたスコープ内で定義された変数へのアクセスを保持する関数です。この場合、カウンター変数はグローバル スコープで定義され、クロージャとみなされ、increment() 関数内で参照されます。
ただし、Python では、関数内の変数は自動的にローカル変数として扱われます。特に明示的に宣言されていない限り。 increment() 内で line counter = 1 が実行されると、インタプリタはローカル カウンタ変数をインクリメントしようとします。ただし、increment() 関数内で counter に値が割り当てられていないため、バインドされていないままになります。これにより、UnboundLocalError が発生します。
この問題を解決するには、主に 2 つのアプローチがあります。
counter = 0 def increment(): global counter counter += 1 increment()
counter = 0 def increment(): nonlocal counter counter += 1 increment()
以上がクロージャ内の `counter = 1` が Python で `UnboundLocalError` を引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。