ホームページ >バックエンド開発 >Python チュートリアル >Python の「nonlocal」キーワードは、スコープ管理における「global」とどのように異なりますか?

Python の「nonlocal」キーワードは、スコープ管理における「global」とどのように異なりますか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-11 19:05:11960ブラウズ

How Does Python's `nonlocal` Keyword Differ from `global` in Scope Management?

Python 3 における「非ローカル」の役割を理解する

Python 3 では、「非ローカル」は、で定義された変数にアクセスする際に重要な役割を果たします。囲んでいるスコープですが、現在のスコープの外側にあります。グローバル スコープ内の変数を参照する「グローバル」とは異なり、「非ローカル」を使用すると、親関数のスコープ内の変数を操作できます。

「非ローカル」を使用せずにこの例を検討してください:

x = 0
def outer():
    x = 1
    def inner():
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)

出力:

inner: 2
outer: 1
global: 0

ご覧のとおり、内部関数の変数 "x" にはローカル値が割り当てられています。外側の関数の変数 "x" は 1 のままです。グローバル変数 "x" は初期値 0 を保持します。

次に、このコードを "nonlocal" を使用して書き換えてみましょう:

x = 0
def outer():
    x = 1
    def inner():
        nonlocal x
        x = 2
        print("inner:", x)

    inner()
    print("outer:", x)

outer()
print("global:", x)

出力:

inner: 2
outer: 2
global: 0

「非ローカル」を使用すると、内部関数の変数「x」がバインドされます。外側の関数の変数「x」に代入します。その結果、内部関数内で「x」が変更されると、外部関数の値にも影響します。グローバル変数 "x" は変更されません。

対照的に、"global" は、内部関数の変数 "x" をグローバル スコープの変数 "x" にバインドします。

x = 0
def outer():
    x = 1
    def inner():
        global x
        x = 2
        print("inner:", x)
        
    inner()
    print("outer:", x)

outer()
print("global:", x)

出力:

inner: 2
outer: 1
global: 2

Python で変数を効果的に管理するには、「非ローカル」と「グローバル」の微妙な違いを理解することが重要ですコード。

以上がPython の「nonlocal」キーワードは、スコープ管理における「global」とどのように異なりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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