ホームページ >バックエンド開発 >Python チュートリアル >Python で囲みスコープ内の変数を変更するにはどうすればよいですか?
囲むスコープ内の変数の変更: Python らしい難問
Python では、スコープの概念が変数の可視性とアクセス可能性を制御します。ネストされたスコープと囲まれたスコープを扱う場合、外側のスコープ内の変数を変更するのは必ずしも簡単ではありません。
問題: UnboundLocalError
次のコード スニペットを考えてみましょう。
def A(): b = 1 def B(): # Access 'b', no problem print(b) # Attempt to modify 'b' b = 2 # UnboundLocalError B() A()
ここで、変数 b は B を囲むスコープ内で定義されていますが、そうではありませんグローバル。 B 内で b を直接変更しようとすると、UnboundLocalError が発生します。これは、b が B でローカル変数として宣言されていないためです。
解決策: 非グローバル スコープを採用する
Python 3 では、nonlocal キーワードが役に立ちます。これにより、囲まれた非グローバル スコープ内の変数を変更できます。
def A(): b = 1 def B(): nonlocal b b = 2 B() print(b) # Output: 2
Python 2 の代替案: 救済のための可変性
一方、Python 3 には便利な機能があります。 nonlocal キーワードの場合、Python 2 は直接的な解決策を提供しません。回避策は、可変オブジェクト (リストや辞書など) を使用し、変数を再割り当てする代わりにその値を変更することです。
def foo(): a = [] def bar(): a.append(1) bar() bar() print(a) # Output: [1, 1]
オブジェクトであるリスト a を操作することで、基本的にその内容を変更しながら変更できます。 Python 2 のスコープ ルールに準拠します。
以上がPython で囲みスコープ内の変数を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。