ホームページ >バックエンド開発 >Python チュートリアル >入れ子関数は 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 サイトの他の関連記事を参照してください。