Python では、クロージャは、関数の実行が終了した後でも、関数が作成された環境を「記憶」できるようにする重要な概念です。クロージャを使用すると、グローバル変数やクラス インスタンスを使用せずにステートフル関数を実装できます。
この投稿では、nonlocal キーワードを使用して単純なカウンターを実装することにより、クロージャを調べます。それでは、詳しく見ていきましょう!
クロージャは、入れ子になった関数がその外側のスコープから変数を参照するときに発生し、外側の関数の実行が終了した後でもそれらの変数へのアクセスを保持できるようにします。クロージャは、関数内の状態や動作をカプセル化する場合に特に便利です。
Python では、nonlocal キーワードを使用して、グローバルではない最も近い囲みスコープ内の変数を変更します。 nonlocal キーワードがないと、内部関数はそれを囲んでいるスコープ内の変数を変更できません。代わりに、新しいローカル変数が作成されます。 nonlocal キーワードは、囲んでいるスコープの変数を操作するように Python に指示することで、この問題を解決します。
グローバル変数やクラスに依存せずに、クロージャを使用してカウントを追跡する単純なカウンター関数を作成してみましょう。
内部関数のインクリメントを返す make_counter という関数を作成します。内部関数は呼び出されるたびに count 変数を増加させます。
インクリメント関数が make_counter 関数のスコープで定義された count 変数を確実に変更するために、nonlocal キーワードを使用します。
実装は次のとおりです:
def make_counter(): count = 0 # Variable in the enclosing scope def increment(): nonlocal count # Tell Python to modify the `count` from the enclosing scope count += 1 # Increment the counter return count # Return the current count return increment # Return the inner function, which forms the closure
make_counter 関数が完成したので、カウンターのインスタンスを作成し、それを複数回呼び出してカウンターの増分を確認できます。
counter = make_counter() print(counter()) # Output: 1 print(counter()) # Output: 2 print(counter()) # Output: 3 print(counter()) # Output: 4 print(counter()) # Output: 5
クロージャは、関数内に状態をカプセル化するための強力かつエレガントな方法を提供します。これらは、次のようなシナリオで特に役立ちます。
クロージャは、デコレータ、メモ化、コールバックなどのより高度なユースケースに使用できます。
以上がPython のクロージャを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。