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

Susan Sarandon
リリース: 2024-10-21 18:40:03
オリジナル
364 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!