クロージャーとは
クロージャーは、関数の外で宣言された変数や引数を保持する機能のことです。これにより、関数が定義されたスコープの外からも変数にアクセスできます。Pythonでは、すべてがオブジェクトとして扱われるため、変数もオブジェクトです。
基本的な関数の例
以下は、円の面積を計算する関数の例です。
def circle_area(pi, radius): # 関数オブジェクトを作成してcircle_area変数に代入
return pi * radius * radius
area = circle_area # ()がないと、変数に代入されている関数オブジェクトを取り出すだけ
print(area) # <function circle_area at 0x...>
print(area(3.14, 2)) # 12.56
クロージャーの例
次に、クロージャーを使った関数の例を見てみましょう。
def circle_area(pi):
def calculation(radius):
return pi * radius * radius
return calculation
area1 = circle_area(3.14)
print(area1) # <function circle_area.<locals>.calculation at 0x...>
ここで、area1
は関数オブジェクトcalculation
を返しています。この関数は、pi
の値を覚えていて、後で使うことができます。
result1 = area1(2)
print(result1) # 12.56
別の例
別の値で関数を生成することもできます。
area2 = circle_area(3)
print(area2) # <function circle_area.<locals>.calculation at 0x...>
ここで、area2
も関数オブジェクトcalculation
を返していますが、pi
の値は3です。
result2 = area2(2)
print(result2) # 12
まとめ
クロージャーを使うことで、外部の変数を保持した関数を作成できます。これにより、関数が定義された環境の変数をそのまま利用することが可能になります。