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

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

Mary-Kate Olsen
リリース: 2024-12-11 19:05:11
オリジナル
888 人が閲覧しました

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

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