Python でスコープを囲む非グローバル変数の変更
入れ子関数を使用する場合、多くの場合、定義された変数にアクセスして変更する必要があります。グローバルでも動的スコープを通じてアクセス可能でもない、囲みスコープ内。これは、字句スコープを実装する Python では課題となる可能性があります。
次の例を考えてみましょう:
def A(): b = 1 def B(): # Can access 'b' but cannot modify it directly print(b) B() A()
このコードでは、変数 b は B() の囲みスコープで定義されています。関数。ただし、B() 内で b を直接変更しようとすると、B() に対してローカルとして宣言されていないため、UnboundLocalError が発生します。
これに対処するために、Python は 2 つの解決策を提供します。
Python 3: nonlocal キーワードを使用します
Python 3 では、nonlocal キーワードを使用して変数を変更できますグローバルを除く最も近い囲みスコープ内。使用方法は次のとおりです:
def foo(): a = 1 def bar(): nonlocal a a = 2 bar() print(a) # Output: 2
この例では、nonlocal キーワードにより bar() 関数内で非ローカル変数が作成され、その変更が可能になります。
Python 2 : 可変オブジェクトを使用する
非ローカルが利用できない Python 2 では、可変オブジェクトを使用できますリストや辞書などのオブジェクト。変数を再割り当てする代わりに、オブジェクトの値を変更できます。
def foo(): a = [] def bar(): a.append(1) bar() bar() print(a) # Output: [1, 1]
ここで、変数は変更可能であり、bar() 関数はリストに追加することでその値を変更できます。
以上がPython で非グローバルな囲みスコープ内の変数を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。