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