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

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

DDD
リリース: 2024-12-19 22:05:11
オリジナル
980 人が閲覧しました

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

Python 3 の「非ローカル」の力

Python プログラミングでは、変数はスコープに従って分類できます。

  • グローバル: を含むプログラム全体を通じてアクセス可能ネストされた関数。
  • ローカル: 特定の関数またはブロック内でのみ定義され、アクセスできます。

ただし、場合によっては、これらのスコープ間のギャップを埋める必要がある場合があります。ここで、「nonlocal」キーワードが登場します。

「nonlocal」を理解する

「nonlocal」は、Python 3 で存在する変数を宣言するために使用されます。スコープはより広いですが、グローバルとして宣言されていません。これにより、同じ名前のグローバル変数に影響を与えることなく、囲まれた関数から変数にアクセスして変更することができます。

「非ローカル」の影響

違いを説明するには、次のことを考えてください。なしの次の例"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
ログイン後にコピー

この場合、inner() 関数内の変数 x は、関数内の x から独立した新しいローカル変数とみなされます。 inner() 関数とグローバル 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" キーワードにより、inner() 関数内の x 変数が x 変数を参照および変更できるようになります。アウター()関数内。 inner() 関数内で行われた変更は、outer() 関数内に保持されます。

「global」との違い

「nonlocal」は「global」キーワードとは異なりますこれは、囲まれたスコープから変数にアクセスして変更できるのに対し、「グローバル」は真にグローバルなスコープから変数にアクセスして変更するという点です。

上記の例で「global」を使用すると、次の出力が得られます。

inner: 2
outer: 1
global: 2
ログイン後にコピー

この場合、inner() 関数内の x 変数は、 global x とその変更は、outer() 内の値ではなく、グローバル変数の値に影響します。 function.

結論

「非ローカル」は、Python 3 の囲まれたスコープから変数にアクセスして変更するための強力なメカニズムを提供します。これにより、グローバル変更の落とし穴を回避できます。ネストされた関数内で変数を管理し、より組織化されたモジュール形式のコード構造を維持します。

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

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