ホームページ  >  記事  >  バックエンド開発  >  入れ子関数は Python の囲みスコープ内の変数を変更できますか?

入れ子関数は Python の囲みスコープ内の変数を変更できますか?

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

Can Nested Functions Modify Variables in Enclosing Scopes in Python?

入れ子関数のスコープ内の非バインド ローカル変数

Python では、入れ子関数は、外側のスコープで定義された変数にアクセスし、コードの再利用とカプセル化を可能にします。ただし、変数が非ローカルまたはグローバルとして宣言されていない場合、入れ子になった関数内の囲みスコープ内の変数を変更しようとすると、「UnboundLocalError」が発生する可能性があります。

次のコードを検討してください:

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

    def inner():
        ctr += 1</code>

inner() を呼び出すと、ctr が inner 関数内で定義されていないため、「UnboundLocalError」が発生します。これを修正するには、次の方法を使用できます。

Python 3 以降の場合:

非ローカル キーワードを使用します

非ローカル キーワードを使用すると、ネストされた関数内から囲みスコープで定義された変数を変更します。

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

    def inner():
        nonlocal ctr
        ctr += 1</code>

Python 2 以前の場合:

データ構造を使用して変数を保持します

Python 2 では、ネストされた関数は外側のスコープ内の変数を変更できないため、データ構造を使用して変数を保持し、それをネストされた関数に渡す必要があります。

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

    def inner():
        ctr[0] += 1</code>

出現するすべての文字列を置き換えます。コード内の ctr は ctr[0].

です。

以上が入れ子関数は Python の囲みスコープ内の変数を変更できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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