ぺーぱーの日々

上機嫌でいること、夢中でいることを目標に、今日も色んなことに手を出します。

MENU

ぼく的!クロージャ―について一番わかりやすいサイト

以下のサイトで、クロージャ―について理解しました。

https://udemyfun.com/python-closure/

 

●アウトプット

クロージャ―とは、途中経過を返り値にしている関数のこと。

関数内関数と似ているけど、返り値にしているものが違う。

 

●返り値で得られるものの違い

関数内関数・・・結果

クロージャ―・・・途中経過

 

●コードでの違い

・関数内関数(得られる返り値:

3

def outer_func(x, y):
def inner_func():
print(x + y)

return inner_func()


outer_func(1, 2)

クロージャ―(得られる返り値:

<function outer.<locals>.inner at 0x104a11268>
def outer(a, b):
def inner():
return a * b

return inner


r = outer(7, 2)
print(r)

●該当箇所(outer関数の返り値部分)の違い

関数内関数・・・return inner_func()

クロージャ―・・・return inner

 

●なぜ、クロージャ―が必要なのか

最終的な関数の実行前にいくつかのパターンを用意しておきたいとき。(参考サイト引用)

 

●まとめ

なにげなく、returnには()を付けるものだと思っていたが、それは返り値に結果が欲しいときの書き方で、途中経過が欲しいときには()はつけないということを体系的に理解できた。数字(計算結果)が欲しいのに、よくわからないデータ型が出力結果として出てきたこともあったので、あれは()をつけ忘れて、意図せずクロージャ―を使っていたんだなと腑に落ちた。人間にとって(初学者にとって)は、()があるかないかは大きな差ではないと思うのだが、コンピュータにとってはそれらは全くの別物であるんだなというぼんやりとしたまとめになるが、たぶんそういうこと。