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

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

Susan Sarandon
リリース: 2024-12-28 05:01:09
オリジナル
633 人が閲覧しました

How Can I Modify Variables in a Non-Global, Enclosing Scope in Python?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート