Pythonのクロージャのコンセプトは何ですか
関数内で定義された関数で、その内部関数から外部関数のローカル変数にアクセスできるものをクロージャという。具体的には、関数オブジェクトとその参照環境を組み合わせたものである。
Pythonのクロージャのユースケースは次のとおりです。
- ネストした関数は、関数内部で関数を定義し、それを返り値として返すことができます。返された関数はクロージャであり、外部関数のローカル変数にアクセスできます。これは、引数に応じて異なる関数を返す、ファクトリー関数を実装するために使用されます。
こちらのコードをご覧ください。
def outer_func(x):
def inner_func(y):
return x + y
return inner_func
closure = outer_func(10)
print(closure(5)) # 输出15
- クロージャは外部関数のローカル変数にアクセスできるため、外部関数のローカル変数はクロージャの生存期間に保存されるので、クロージャを使用して関数の状態を保持できます。この方法は、デコレータやコールバック関数の作成に使用されることが多いです。
サンプルコードは次のとおりです。
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 変数を持ち、自らの状態を保つことができる。