09/05/25 09:19:54
>>940
その「繋ぎ感」の気持ちよさは認めるけど、読み書きしやすさとは違うんじゃないかな。
長い処理は適度に切って変数を使うPython流も、長くなりそうで実際に書いてみると
大して長くならないし、あんまり繋げすぎるよりも読みやすい。
a = [v*v for v in range(1,101) if v%100/10%3 == 0]
print '-'.join(reversed(a))
PythonもML上でRubyのブロック記法が提案されたけど、ブロック記法の利点を示す
例として挙げたサンプルコードがことごとく同等にスマートなPythonicなコードで
反論されて、Pythonにはブロック記法いらないという結論になった経緯がある。
lambda もそうだね。関数内でローカル関数が定義できて、Pythonの関数は
「関数専用の名前空間」なんてキモい仕様になってなくて普通定義するだけで
変数に関数が代入されるから、mapにもfilterにも定義した関数を渡せば良い。
lambda を使う大抵の場面はリスト内包で代用可能。 Python3 からは辞書も
集合も内包表記が使えるから、本気で lambda の有効な場面が無くなる。