ホームページ  >  記事  >  バックエンド開発  >  Python の入れ子関数スコープの UnboundLocalError を解決する方法?

Python の入れ子関数スコープの UnboundLocalError を解決する方法?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-21 18:45:02989ブラウズ

How to Resolve UnboundLocalError in Nested Function Scopes in Python?

UnboundLocalError (入れ子関数スコープ内)

Python では、入れ子関数から外部関数で定義された変数にアクセスすると、UnboundLocalError。次の例を考えてみましょう。

<code class="python">def outer():
    ctr = 0

    def inner():
        ctr += 1

    inner()</code>

このコードを実行すると、内部関数の変数 ctr に対して UnboundLocalError が発生します。このエラーは、Python が ctr を、外部関数で定義されているにもかかわらず、内部関数内のローカル変数として扱うために発生します。この問題を解決するには、内部関数が外部関数のスコープにアクセスできるメカニズムを使用する必要があります。

解決策:

Python 3 では、 が導入されました。 nonlocal ステートメント。非ローカル変数の変更を許可します。 nonlocal を内部関数に追加することで、ctr を非ローカル変数として明示的に宣言し、内部関数内での再バインドを可能にします。

<code class="python">def outer():
    ctr = 0

    def inner():
        nonlocal ctr
        ctr += 1

    inner()</code>

あるいは、Python 2 では、nonlocal ステートメントでは、ベアネームの再バインドを避けるためにリストまたは他のデータ構造内でカウンター変数を囲むことでこの問題を回避できます。

<code class="python">ctr = [0]

def inner():
    ctr[0] += 1</code>
このアプローチでは、リスト内の ctr の値が維持されます。 ctr を使用して、

UnboundLocalError の発生を防ぎます。

以上がPython の入れ子関数スコープの UnboundLocalError を解決する方法?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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