クロージャーの概念を初学者に教える際に見せるメモ。
def make_circle_area_func(pi):
def circle_area(radius):
return radius * radius * pi
return circle_area
circle_area3 = make_circle_area_func(3) // ← その1
circle_area3(4) // ← その2
// 48が出力
circle_area314 = make_circle_area_func(3.14)
circle_area3(4)
// 50.24が出力
関数の中に関数を作ると、それがクロージャーというもので、機能してくれます。
例えば、上記コードの「その1」を実行すると、一旦make_circle_area_func()に引数を与えます。
よってこの状態では引数のpiに3が与えられます。
それを一旦変数に入れると、上記の状態が記憶されたまま(= piの部分に3が入っている状態)になります。ここではcircle_area3という変数にしました。
その後、「その2」の部分のようにcircle_area3に引数を与えてあげると、circle_area(radius)の引数に自動的に与えられます。
以下は自分なりのイメージ。
![](https://masurao-record.com/wp-content/uploads/2022/01/スクリーンショット-2022-01-01-6.20.12-1024x371.png)
与えられた引数を覚えてくれるので、便利ですね。
コメント