ホームページ > バックエンド開発 > Python チュートリアル > Python のクロージャを理解する

Python のクロージャを理解する

Barbara Streisand
リリース: 2024-12-23 14:26:09
オリジナル
202 人が閲覧しました

Understanding Closures in Python

Python では、クロージャは、関数の実行が終了した後でも、関数が作成された環境を「記憶」できるようにする重要な概念です。クロージャを使用すると、グローバル変数やクラス インスタンスを使用せずにステートフル関数を実装できます。

この投稿では、nonlocal キーワードを使用して単純なカウンターを実装することにより、クロージャを調べます。それでは、詳しく見ていきましょう!

クロージャとは何ですか?

クロージャは、入れ子になった関数がその外側のスコープから変数を参照するときに発生し、外側の関数の実行が終了した後でもそれらの変数へのアクセスを保持できるようにします。クロージャは、関数内の状態や動作をカプセル化する場合に特に便利です。

非ローカルキーワード

Python では、nonlocal キーワードを使用して、グローバルではない最も近い囲みスコープ内の変数を変更します。 nonlocal キーワードがないと、内部関数はそれを囲んでいるスコープ内の変数を変更できません。代わりに、新しいローカル変数が作成されます。 nonlocal キーワードは、囲んでいるスコープの変数を操作するように Python に指示することで、この問題を解決します。

クロージャを使用したカウンターの実装

グローバル変数やクラスに依存せずに、クロージャを使用してカウントを追跡する単純なカウンター関数を作成してみましょう。

ステップ 1: make_counter 関数を定義する

内部関数のインクリメントを返す make_counter という関数を作成します。内部関数は呼び出されるたびに count 変数を増加させます。

ステップ 2: 非ローカルを使用してカウント変数を変更する

インクリメント関数が 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
ログイン後にコピー

ステップ 3: カウンターの使用

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

説明

  • count 変数は make_counter 関数内で 0 に初期化されます。
  • インクリメント関数 (make_counter によって返される) を呼び出すたびに、nonlocal キーワードを使用して、外側のスコープ内の count 変数が変更されます。 Closure プロパティのおかげで、increment 関数は、make_counter 関数の実行が終了した後でも count へのアクセスを保持します。

クロージャーを使用する理由

クロージャは、関数内に状態をカプセル化するための強力かつエレガントな方法を提供します。これらは、次のようなシナリオで特に役立ちます。

  • グローバル スコープに公開せずに値を追跡したいとします。
  • 複数の呼び出しにわたって以前の状態を記憶する関数が必要です (反例のように)。
  • 単純な状態管理のためにグローバル変数を使用したり、クラスを作成したりする必要はありません。

クロージャは、デコレータ、メモ化、コールバックなどのより高度なユースケースに使用できます。

以上がPython のクロージャを理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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