« Pythonで特定の何種類かの値からランダムに選んでリストを作る方法 |Main| PythonとRubyでパスカルの三角形ワンライナー »

« Pythonで特定の何種類かの値からランダムに選んでリストを作る方法 | Python | PythonとRubyでパスカルの三角形ワンライナー »

« RubyのyieldとPythonのyieldの違い | Ruby | PythonとRubyでパスカルの三角形ワンライナー »

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

に相当する状態のようです。

トラックバック(Trackback)

Trackback URL: http://www.nishiohirokazu.org/mt/mt-tb.cgi/209

ご意見・ご感想をお送りください(フィードバック)

(フィードバックはメールで送信され、基本的に表示されませんが、内容によっては公開させていただくこともございます。ご了承ください。Your comment doesn't appear the page immediately. If the comment has value to other people, it will be put on the page or subsequent entries. Thank you.)

上の情報は、いずれも未記入でかまいません。 All of above questions are optional.