混乱しそうになったので、調べてまとめてみる。
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)
は、最後の引数をそのまま返す。