作者: Bruce.
日時: 2007/9/18(18:05)
Bruce.です。

機械伯爵 writes:

>  ども、機械す。
>  ブログの方で、Python3000は楽しい楽しいと書いてるのだけど、
> 色々調べてみて、reduce関数が無くなってしまったのだけは首を傾げました。

Guidoパパが自分のblogで(FAQに対する回答として)答えてます。
わたしのweb日記に訳文を載せたのですがそこから
#これがオレンジニュースで取り上げられたのはびっくりしましたが :)


Q. If you're killing reduce(), why are you keeping map() and filter()?

あなたはreduce()を殺そうとしているというのに、なぜmap()やfilter()はそのまま
なんですか?


A. I'm not killing reduce() because I hate functional programming; 
I'm killing it because almost all code using reduce() 
is less readable than the same thing written out using a for loop and an 
accumulator variable. On the other hand, map() 
and filter() are often useful and when used with a pre-existing function 
(e.g. a built-in) they are clearer than a list 
comprehension or generator expression. (Don't use these with a lambda though; 
then a list comprehension is clearer and faster.)

関数型プログラミングを嫌っているから reduce()をなくすのではありません。
reduce()を使っているコードのほとんどすべてがforループや accumlator 変数を
使って書かれた同等のものよりも読みにくいからなくすのです。
一方で、map()だとかfilter()は便利なことが多く、既に存在している関数(たとえば
組込みのそれ)を使ったときにはリスト内包(list comprehension)やジェネレータ式
(generator expression)を場合よりもコードが明瞭になります(ただしこれらをlambda
式とともに使ったりしないこと。そうするよりはリスト内包を使った方が明瞭かつ高速
なコードになります)。


いじょ。