ホームページ >バックエンド開発 >Python チュートリアル >Python 関数内の `counter = 1` によって `UnboundLocalError` が発生するのはなぜですか?

Python 関数内の `counter = 1` によって `UnboundLocalError` が発生するのはなぜですか?

DDD
DDDオリジナル
2024-12-26 09:52:14238ブラウズ

Why Does `counter  = 1` Inside a Python Function Cause an `UnboundLocalError`?

Python クロージャで説明された UnboundLocalError

質問で説明されている状況は、変数スコープとして知られる Python の基本的な概念を中心に展開しています。明示的な変数宣言を持つ言語とは異なり、Python は割り当てに基づいて変数のスコープを決定します。

次のコードを考えてみましょう:

counter = 0

def increment():
  counter += 1

increment()

このコードでは UnboundLocalError が発生します。なぜですか?

Python では、関数内の代入により、変数がその関数に対してローカルであるとマークされます。 increment() 関数の counter = 1 という行は、counter がローカル変数であることを意味します。ただし、この行はローカル変数が割り当てられる前にアクセスしようとするため、UnboundLocalError が発生します。

この問題を回避するには、いくつかのオプションがあります。

  • グローバル キーワード: counter がグローバル変数であることを意図している場合は、その割り当ての先頭に global キーワードを内部で付けます。 function:
counter = 0

def increment():
  global counter
  counter += 1
  • 非ローカルキーワード (Python 3.x): counter が親関数のローカル変数であり、increment() が内部関数である場合、非ローカル キーワードを使用できます:
def outer():
  counter = 0

  def inner():
    nonlocal counter
    counter += 1

これらのテクニックを利用することで、ローカルを正しく操作できます。クロージャ内のグローバル変数を使用して、不要なエラーを回避します。

以上がPython 関数内の `counter = 1` によって `UnboundLocalError` が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。