ホームページ > バックエンド開発 > Python チュートリアル > Python クロージャは入れ子関数とどう違うのでしょうか?

Python クロージャは入れ子関数とどう違うのでしょうか?

Barbara Streisand
リリース: 2024-11-24 18:15:13
オリジナル
903 人が閲覧しました

How Do Python Closures Differ From Nested Functions?

Python のクロージャ: 謎を明らかにする

入れ子関数は Python でよく見られるため、クロージャとの関係について疑問が生じます。これらはいくつかの特性を共有していますが、互換性はありません。

クロージャは、外側のスコープのローカル変数へのアクセスを、外側の関数が実行を完了した後でも保持する関数です。これにより、後でそれらの変数を利用できるようになります。

ネストされた関数とクロージャ

一方、ネストされた関数は、別の関数内で定義されますが、その関数を継承しません。デフォルトではローカル変数。これらは、外側のスコープからローカル変数を参照する場合にのみクロージャになります。ローカル変数を参照しないと、外側の関数の完了後にアクセスできなくなります。

Python でのクロージャの例:

def make_printer(msg):
    def printer():
        print(msg)
    return printer

printer = make_printer('Foo!')
printer()  # Output: Foo!
ログイン後にコピー

この例では、入れ子関数 printer は、囲み関数 make_printer からローカル変数 msg を参照します。 make_printer が戻ると、通常、msg はスコープ外になりますが、クロージャはそれへのアクセスを保持します。

外側のスコープ変数を参照しない入れ子関数におけるクロージャの不在:

入れ子関数が外側のスコープからローカル変数を参照しない場合、それはクロージャとみなされません。代わりに、独自のローカル変数を持つ通常の関数として動作します。

非クロージャーネスト関数の例:

def make_printer(msg):
    def printer(msg=msg):
        print(msg)
    return printer

printer = make_printer('Foo!')
printer()  # Output: Foo!
ログイン後にコピー

ここでは、 msg パラメータは入れ子関数プリンタで使用され、外部スコープから独立した独自のローカル変数を持つことが保証されます。したがって、これは閉鎖ではありません。

以上がPython クロージャは入れ子関数とどう違うのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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