PythonとRubyでデフォルト引数の評価されるタイミングは違う
驚きました。 rubyco(るびこ)の日記 - デフォルト引数は明示的に評価されると同じことをPythonで書いた場合、関数定義の時点で評価されます。
>>> def default(n): print "default", n return n + 1 >>> def foo(x, y = default(5)): print x, y default 5
Rubyでは関数が呼ばれた時にデフォルト引数を評価するようです。しかも遅延評価とかではないようで、何度も関数を呼べば何度も実行されます。つまりPythonで書けば
>>> def foo(x, y = None): if y == None: y = default(5) print x, y
に相当する状態のようです。