reduceの挙動

混乱しそうになったので、調べてまとめてみる。


def f(x, y):
print (x, y),
return x + y

という関数を定義して、


print reduce(f, range(3))

とすると、


(0, 1) (1, 2) 3

つまり、f(f(0, 1), 2)を計算している。


print reduce(f, range(3), 0)

とすると、


(0, 0) (0, 1) (1, 2) 3

つまり、f(f(f(0, 0), 1), 2)を計算している。
あと、


print reduce(f, [1])

は、唯一の要素をそのまま返す。


print reduce(f, [])

はエラー。


print reduce(f, [], 0)

は、最後の引数をそのまま返す。