ホームページ >バックエンド開発 >Python チュートリアル >変数の変更における Python の `nonlocal` キーワードは `global` とどのように異なりますか?

変数の変更における Python の `nonlocal` キーワードは `global` とどのように異なりますか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-12-21 04:59:13991ブラウズ

How Does Python's `nonlocal` Keyword Differ from `global` in Modifying Variables?

Python 3 の「非ローカル」を理解する

従来の言語とは異なり、Python では、入れ子になった関数が外側のスコープで定義された変数にアクセスできます。ただし、ネストされた関数内で宣言されていない変数 (非ローカル変数) にアクセスすると、予期しない動作が発生する可能性があります。

「非ローカル」キーワード

In Python 3 では、「nonlocal」キーワードを使用すると、入れ子になった関数内から外側のスコープで宣言された変数を変更できます。 「nonlocal」を使用すると、変更している変数が非ローカルであり、外部スコープに属していることを宣言します。

「nonlocal」の仕組み

を使用せずに次のコード"nonlocal":

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 をシャドウし、その結果、値 2 が割り当てられます。内部関数内の x。外部関数の変数 x は影響を受けません。

「nonlocal」の使用

外部関数の変数 x を内部関数から変更するには、次のように「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

この場合、「nonlocal」キーワードにより、内部関数が外部関数の変数 x にアクセスして変更できるようになります。その結果、外側の関数の x の値は 2 に変更されます。

「global」との比較

「nonlocal」とは異なり、「global」キーワードはグローバルスコープに属する変数を参照します。 「global」を使用すると、同じ名前の他のローカル変数の存在に関係なく、内部関数の変数がグローバル変数にバインドされます:

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

したがって、外部スコープで宣言された変数を変更する場合は「nonlocal」を使用し、グローバル スコープから変数にアクセスする場合は「global」を使用する必要があります。範囲。

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

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