s = 'Takeshi'
def ask(x):
def saying():
return 'Im'+x
return saying
#呼び出し
name = ask(s)
name()
つたないコードですが、学習したクロージャについて載せます。
関数の中に関数があります。
処理の流れ
- askを呼び出し引数sを与え、name変数にいれる
- askは呼び出されたとき同時にsaying関数を呼び出している。それがname変数に入っている。
- saying関数は、askの仮引数xにある値を覚えている。つまりsを覚えている。
- 最後にname()で動かすとsaying関数の処理'Im+xが戻り値としてでてくる
(xには'Takeshi'が入っているので'ImTakeshi'とでてくる)
このように外の関数に与えられた値を覚えていることをクロージャという。
以上がクロージャについて私が理解している内容になります。