ホームページ >バックエンド開発 >Python チュートリアル >Python クロージャと入れ子関数: 違いは何ですか?
Python のクロージャーと入れ子関数: 明確化
Python には「入れ子関数」として知られる概念があり、クロージャーとよく間違われます。この混乱に対処するために、Python 内のクロージャの本質を詳しく調べてみましょう。
クロージャは、外側のスコープが終了した後でも、そのスコープからローカル変数へのアクセスを維持する関数として定義されます。 Python では、入れ子になった関数が外側の関数からローカル変数を参照するときにクロージャが発生します。これらの変数は、入れ子になった関数からアクセスできるため、外側のスコープの外でもアクセスできます。
次の例を考えてみましょう。
def make_printer(msg): def printer(): print(msg) return printer printer = make_printer('Foo!') printer()
このシナリオでは、関数 printer は参照しているためクロージャです。囲んでいる関数 make_printer からのローカル変数 msg。 make_printer が終了した後でも、msg はプリンターからアクセス可能なままです。
ただし、すべての入れ子関数がクロージャであるわけではありません。ネストされた関数がクロージャとして認定されるには、次の基準を満たす必要があります。
ネストされた関数がこれらの要件を満たさない場合、それはクロージャではなく、通常のネストされた関数とみなされます。 function.
たとえば、次のコードを考えてみましょう:
def make_printer(msg): def printer(msg=msg): print(msg) return printer printer = make_printer("Foo!") printer() # Output: Foo!
ここで、ネストされた関数 printer は、外側の関数からの msg を参照しないため、クロージャではありません。代わりに、デフォルトのパラメータに値を割り当て、msg への外部アクセスの必要性を排除します。
したがって、Python でクロージャと入れ子関数を区別するには、入れ子関数が msg へのアクセスを維持しているかどうかを考慮することが重要です。後者の実行が完了した後でも、外側のスコープからのローカル変数。
以上がPython クロージャと入れ子関数: 違いは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。