在 haskell 中,运算符的初始值foldl
显然是强制性的
Prelude> foldl (+) 0 [1]
1
Prelude> foldl (+) 0 []
0
Prelude> :t foldl
(a -> b -> a) -> a -> [b] -> a
但是在reduce函数(或functools.reduce
)中,初始值是可选的
reduce(function, sequence[, initial]) -> value
唯一需要初始值的时候是序列为空时。这与haskell中的行为一致。Python中的Doesreduce
假设如果序列的大小为1;然后它在内部处理这些极端情况?
>> reduce(operator.sub, [1])
1
>> reduce(operator.mul, [1])
1
>> reduce(operator.add, [1])
1