クロージャで値を安全に保つ
姪にクロージャを理解してもらうお手伝いを続けています。get_new_func() という、入れ子関数を返す関数を書きました。入れ子関数 call_func() は、get_new_func() に渡された関数を呼び出します。また、my_special_function() という関数も用意しており、これは「my_special_function() を実行しています」というメッセージを出力するだけの関数です。
ここでは、my_special_function() を get_new_func() に渡した後でどんな変更を加えても、新しい関数のクロージャに元の my_special_function() が閉じ込められているため、新しい関数は元の my_special_function() の動作を再現することを姪に示したいと考えています。
この演習はコースの一部です
Python関数の書き方
実践的なインタラクティブ演習
このサンプルコードを完成させて、この演習に挑戦してみましょう。
def my_special_function():
print('You are running my_special_function()')
def get_new_func(func):
def call_func():
func()
return call_func
new_func = get_new_func(my_special_function)
# Redefine my_special_function() to just print "hello"
def my_special_function():
____
new_func()