ホームページ > バックエンド開発 > Python チュートリアル > 関数内の `counter = 1` が Python で `UnboundLocalError` を引き起こすのはなぜですか?

関数内の `counter = 1` が Python で `UnboundLocalError` を引き起こすのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-15 00:32:14
オリジナル
122 人が閲覧しました

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

クロージャの UnboundLocalError: 分析

UnboundLocalError は、関数のコード内で使用される変数がローカル、グローバル、またはとして定義されていない場合に発生します。非ローカルブロックの一部。次のコードを考えてみましょう:

counter = 0

def increment():
  counter += 1

increment()
ログイン後にコピー

このコードを実行すると UnboundLocalError が発生します。なぜこのようなことが起こるのでしょうか?

Python の変数スコープを理解する

Python は代入に基づいて変数スコープを動的に決定します。変数が関数内で割り当てられている場合、その変数はその関数に対してローカルであるとみなされます。この例では、increment() 内の割り当て counter = 1 は、カウンターをその関数に対してローカルとして暗黙的に定義します。

ローカル変数とグローバル変数

Python はローカル変数とグローバル変数を区別します。グローバル変数。グローバル変数はモジュール レベルで宣言され、プログラム全体からアクセスできます。一方、ローカル変数は関数内で作成され、それらの関数内にのみ存在します。

この場合、カウンターはグローバルに定義されていません。このエラーは、Python が counter の値が割り当てられる前に、increment() のローカル スコープから読み取ろうとするために発生します。したがって、UnboundLocalError が発生します。

エラーの解決

このエラーを解決するには、次のいずれかを実行できます:

  • グローバルキーワード: 関数内と関数外の両方でアクセスできる変数には、global キーワードを使用します。これにより、変数がグローバルとして宣言され、任意のスコープからアクセスできるようになります。
  • 非ローカルを使用する (Python 3.x のみ): このキーワードは、変数を非ローカルとして宣言するために使用されます。現在の関数に対してローカルではないが、それを囲んでいる入れ子になっていない関数内でアクセスできること。

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート