ホームページ > バックエンド開発 > Python チュートリアル > Python の「nonlocal」キーワードはどのように機能しますか?

Python の「nonlocal」キーワードはどのように機能しますか?

Mary-Kate Olsen
リリース: 2024-12-07 22:33:17
オリジナル
511 人が閲覧しました

How Does Python's `nonlocal` Keyword Work?

Python 3 の "nonlocal" を理解する: ディープダイブ

Python 3 では、強力な "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
ログイン後にコピー

inner() 関数の x の値を変更しても、outer() 関数の x の値には影響しないことに注意してください。 。これは、 inner() が、同じ名前の外部変数をシャドウする x という名前のローカル変数を作成するためです。

次に、「非ローカル」を使用してコードを変更しましょう:

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
ログイン後にコピー

この場合、inner() 関数で「nonlocal」を使用すると、outer() の x 変数へのリンクが確立されます。範囲。内部関数内の変数を変更することで、外部スコープの同じ変数を効果的に変更できます。

「グローバル」と「非ローカル」の使用

「グローバル」 " キーワードを使用してグローバル変数にアクセスして変更することもできますが、その動作は「非ローカル」とは異なります。 「global」は変数を真のグローバル スコープにバインドし、「nonlocal」は変数を最も近い外側のスコープにバインドします。

「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
ログイン後にコピー

ご覧のとおり、内部関数で x の値を変更すると、代わりにグローバル変数 x に影響を与えるようになりました。 external() スコープ。

概要

「nonlocal」は、入れ子になった関数から外部スコープの変数にアクセスして変更できるようにする必須の Python キーワードです。グローバル名前空間。これにより、複数のスコープにわたるデータを操作するための明確かつ効率的な方法が提供され、コードがより読みやすく、保守しやすくなります。

以上がPython の「nonlocal」キーワードはどのように機能しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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