Python では、明示的にグローバルとして宣言されていない限り、関数内の変数は通常、ローカル スコープに属します。ただし、外部 (囲み) の非グローバル スコープで定義された変数を変更する必要がある場合があります。この質問では、これを実現する方法について説明します。
コード例を考えます:
def A(): b = 1 def B(): # Access to 'b' is possible here. print(b) # Direct modification of 'b' fails. B() A()
関数 B の変数 b は、非グローバルな囲みスコープ内に存在します。 b を直接変更しようとすると、UnboundLocalError が発生します。 b がグローバル レベルで宣言されていないため、グローバル キーワードは使用できません。
Python 3 解決策:
非ローカル スコープ (Python 3.x)この問題を解決するために使用されたもの:
def A(): b = 1 def B(): nonlocal b # Nonlocal keyword b = 2 B() print(b) # Output: 2 A()
Python 2解決策:
可変オブジェクト (Python 2.x):
変数を直接再割り当てする代わりに、可変オブジェクト (リスト、辞書など) を使用し、その値を変更します:
def A(): b = [] def B(): b.append(1) # Mutation of 'b' B() B() print(b) # Output: [1, 1] A()
以上がPython で外部スコープの非大域変数を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。