始める無料で始める

クロージャで値を安全に保つ

姪にクロージャを理解してもらうお手伝いを続けています。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()
コードを編集して実行