ホームページ >バックエンド開発 >Python チュートリアル >入れ子になった Python 関数内の外側のスコープの変数を変更するにはどうすればよいですか?
外部スコープ内の変数の変更
関数のカプセル化は Python では一般的な方法ですが、外部スコープで定義された変数にアクセスして変更する場合には課題が生じます。スコープ。この記事では、グローバルに定義されていないが、外側のスコープ内に存在する変数を変更する方法について説明します。
Python のスコープと変数の解決
Python は字句スコープに従います。つまり、変数はソースコード内の位置に基づいて解決されます。外部スコープ (囲み関数) は、ネストされたスコープ (内部関数) 内で定義された変数にアクセスできますが、その逆は当てはまりません。外部スコープ内の変数をグローバルとして宣言せずに変更しようとすると、UnboundLocalError が発生します。
外部スコープ変数の変更
Python 3 では、nonlocal キーワードが解決策を提供します。 。これにより、変数が外部スコープで定義されている場合でも、内部関数内で変数を変更できます。変数が非ローカルとして宣言されると、Python はその変数が外側のスコープにバインドされているとみなします。
例:
def outer(): a = 5 def inner(): nonlocal a a += 1 print(a) outer()
出力:
6
Python 2 の回避策
Python 2 には、以下に直接相当するものはありません。非ローカル。ただし、リストや辞書などの変更可能なオブジェクトを使用して同じ効果を実現することもできます。可変オブジェクトの内容を変更することで、外側のスコープ内の変数の値を間接的に変更できます。
例:
def outer(): a = [] def inner(): a.append(1) inner() inner() print(a)
出力:
[1, 1]
Python のスコープ ルールを理解し、適切なテクニックを使用することで、外側の非グローバル スコープ内の変数にアクセスして変更することが可能になり、カプセル化して望ましいプログラム動作を実現します。
以上が入れ子になった Python 関数内の外側のスコープの変数を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。