クロージャーとは
外側の変数を記憶した関数であるex)
def outer(a,b):
def inner():
return a+b
return inner
f = outer(1,2)
r = f()
print(r)
#print
#3
初めに
f = outer(1,2)
が実行されたときに
outer関数の引数には[1,2]が入る
そして、inner関数の
return a+b
にも[1,2]が入る
しかし、inner関数は実行されておらず、実行するための関数が返ってくる
試しに中身を見てみると
def outer(a,b):
def inner():
return a+b
return inner
f = outer(1,2)
print(f)
#print
#<function outer.<locals>.inner at 0x00000248884AEB00>
確かに関数が返ってきている
まだ実行されていないinnerを実行してやると、3が返ってくるというものだ
使いどころ
ex)
def circle_area_func(pi):
def circle_area(r):
return pi*r*r
return circle_area
cal1 = circle_area_func(3.14)
cal2 = circle_area_func(3.141592)
print(cal1(10))
print(cal2(10))
#print
#314.0
#314.1592
circle_area_funに引数を渡しておいて、実行しておく
のちにcircle_areaを実行する
便利かもしれない