add5 をクロージャで作って、add5(3) の結果 8 を表示しよう。def make_tagger(tag):
def inner(text):
return f'[{tag}] {text}' # 外側の tag を覚えている
return inner
warn = make_tagger('警告')
print(warn('電池が少ない')) → [警告] 電池が少ないreturn inner に () が付いていないことに注目。ここでは「関数を呼ぶ」のではなく「関数そのものを渡している」のです。make_adder、引数 n を1つ受け取るx を受け取って n と x を足した結果を返す関数」を定義するreturn で返すadd5 = make_adder(5) で「5を足す関数」ができ、add5(3) が 8 になるadd5・add10 のように振る舞いのちがう関数を作る、ボタンごとに違う動きのコールバックを用意する、といった場面で活躍します。次のクエストのデコレータも、この仕組みの上に成り立っています。return で返す(() は付けない)8
全問正解でクエストクリア!
問題 1: make_multiplier(3) でかけ算するクロージャを作って mul3(4) を表示しよう!
問題 2: make_greeter('こんにちは') で挨拶する関数を作り、greet('たろう') で「こんにちは、たろう!」と表示しよう!
問題 3: make_power(2) で2乗する関数を作り、square(5) で 25 を表示しよう!