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
式とともに使ったりしないこと。そうするよりはリスト内包を使った方が明瞭かつ高速
なコードになります)。
いじょ。