関数で遊んでばっかりだけど、これが最後かな。まだリスト内包表記もあるけど。
reduce関数は与えられた式とリストに対して、計算の結果と次の値をまた計算し、その結果と次の値をまた計算し…というのを繰り返してくれる関数。
前に階乗計算を
def factorial(x): if x == 1: return 1 else: return x * factorial(x - 1)
と書いたけど、reduce関数を使えばわずか、
def factorial(x): return reduce((lambda x,y: x * y),range(1,x+1))
で済んじゃう。速度的なメリットもあるというし、分かりづらいコードにならないのであれば、こっちを使いたくなるのがプログラマ根性ってやつかな。
実行結果は以下。
>>> factorial(1) 1 >>> factorial(2) 2 >>> factorial(3) 6 >>> map(factorial,[4,5,6,10]) [24, 120, 720, 3628800]