Diary?

2008-04-14
Mon

(00:11

エクストリーム・聖火リレーの内容の不謹慎さに大笑い。そうだよなー、こういうのって実にアンサイクロペディア向けだよなー。

(21:11)

俺としては既に終わった問題なのだが、 Python の lambda に複数の文が書けないことに納得行ってない人がいるようなので、大雑把に説明してみる。

たまに勘違いしている人もいるんだけど、 Python には lambda 文なんてものは存在しない。あるのは lambda 。言語リファレンスにも書いてある。ほら、 Expressions のところに lambda があるだろ。そしてまず前提条件として、

  • Python では文が値を持たない
  • Python では式に文を含めることは出来ない

というものがあり、つまり lambda に複数の文を書けるようにするということは、

  • 文が値を持つようにする。これをやると if 文を右辺に持ってくるとか関数からの return 無しで値が取れるようになるので全然 Python 的ではない
    • The Zen of Python: There should be one-- and preferably only one --obvious way to do it.
  • 式が文を含めるようにして、式に含まれた文から値を戻す方法を定義する。無茶苦茶なコードが書けてしまうのでやはり Python 的ではない
    • The Zen of Python: Readability counts.
  • lambda だけを例外扱いにする。一貫性を著しく損なうが、その割には見返りが少ない。ローカル関数定義が出来るのに複雑な無名関数を書く意味がどれだけあるのか
    • The Zen of Python: Special cases aren't special enough to break the rules.

要するに今の Python の意味論を根底からぶち壊すことになるので、 Guido van Rossum が一貫してこの手の話に否定的な態度を取っているのはまったくもって正しいことだ。ぶっちゃけ Python で lambda に複数の文が書けるようになるってのは殆どハルマゲドンなので、そんな事態になったら流石に俺も愛想尽かすぞ。

Creative Commons
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。