閉包能保護你的數值
你還在幫你的姪女理解閉包。你寫了函式 get_new_func(),它會回傳一個巢狀函式。這個巢狀函式 call_func() 會呼叫任何傳入 get_new_func() 的函式。你也寫了 my_special_function(),它只會列印一段訊息,說明你正在執行 my_special_function()。
你想向你的姪女示範:不管在把 my_special_function() 傳給 get_new_func() 之後你怎麼修改它,新函式依然會模仿原本 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()