ホームページ >バックエンド開発 >Python チュートリアル >Python で囲みスコープ内の変数を変更するにはどうすればよいですか?

Python で囲みスコープ内の変数を変更するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-11 16:20:14583ブラウズ

How Can I Modify Variables in Enclosing Scopes in 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。