let式ないしlambdaは式しか渡せないしpythonのreduceいらない。

lambda

def total(r, *args):
    for i in args:
        r += i
    return r

print total(0, 1, 2, 3, 4) # 10

という関数があったとして、合計以外の計算したい。そんな時この関数は使えない。
幸いにも、pythonにはlambda式がある。lambdaを使えば2乗和は計算できる。

def total(r,fn,*args):
	for i in args:
		r += fn(i)
    return r

print total(0,lambda x: x*x,1,2,3,4) # 30

こうも書ける。

def square(x):
    return x * x

print total(0,square,1,2,3,4)

総和ではなく全部かけたものとかそれ以外とか考えていくと、結局totalはreduceに他ならなくて

import operator as op
print reduce(op.add [1,2,3,4],0) # total

print reduce(lambda n, x : n + x * x,
	         [1, 2, 3, 4],
			  0)

でも、結局lambdaは式でしかないか使えない。

(fold (lambda (x n)
         (let1 sq (* x x)
            (+ sq n)))
   0 '(1 2 3 4))

結局もっと長い関数を渡そうとすると、別な名前の関数として定義しなければならなくて、それなら、ループで良いんじゃないのと思う。
pythonのlambdaは式しか渡せない(一時的な変数も使えない)牙をもがれたものだから、ぶっちゃけreduceは役立たず。