Pythonのクロージャのコンセプトは何ですか

関数内で定義された関数で、その内部関数から外部関数のローカル変数にアクセスできるものをクロージャという。具体的には、関数オブジェクトとその参照環境を組み合わせたものである。

Pythonのクロージャのユースケースは次のとおりです。

  1. ネストした関数は、関数内部で関数を定義し、それを返り値として返すことができます。返された関数はクロージャであり、外部関数のローカル変数にアクセスできます。これは、引数に応じて異なる関数を返す、ファクトリー関数を実装するために使用されます。

こちらのコードをご覧ください。

def outer_func(x):
    def inner_func(y):
        return x + y
    return inner_func

closure = outer_func(10)
print(closure(5))  # 输出15
  1. クロージャは外部関数のローカル変数にアクセスできるため、外部関数のローカル変数はクロージャの生存期間に保存されるので、クロージャを使用して関数の状態を保持できます。この方法は、デコレータやコールバック関数の作成に使用されることが多いです。

サンプルコードは次のとおりです。

def counter():
    count = 0
    def increment():
        nonlocal count
        count += 1
        return count
    return increment

counter1 = counter()
print(counter1())  # 输出1
print(counter1())  # 输出2

counter2 = counter()
print(counter2())  # 输出1
print(counter2())  # 输出2

クロージャにより、各 counter インスタンスは独立した count 変数を持ち、自らの状態を保つことができる。

bannerAds