1. ホーム
  2. python

[解決済み] UnboundLocalErrorが発生する理由がわからない(クロージャ) [duplicate]

2022-03-03 17:32:40

質問

何が間違っているのでしょうか?

counter = 0

def increment():
  counter += 1

increment()

上記のコードでは UnboundLocalError .

解決方法は?

Pythonには変数宣言がないので、その変数がどのようなものかを把握する必要があります。 スコープ を使用します。 関数内部で変数への代入があった場合、その変数はローカルとみなされます。 [1] したがって、行

counter += 1

を暗黙のうちに作成します。 counter にローカルな increment() . しかし、この行を実行しようとすると、ローカル変数の値を読み取ろうとします。 counter が代入される前に代入され、結果として UnboundLocalError . [2]

もし counter がグローバル変数である場合 global キーワードが役に立ちます。 もし increment() はローカル関数であり counter がローカル変数である場合 nonlocal をPython 3.xで使用しています。