max(), sum(), next()

Terry Reedy tjreedy at
Thu Sep 11 06:44:07 CEST 2008

Mensanator wrote:
> On Sep 10, 5:36 pm, Terry Reedy <tjre... at> wrote:

>> Sum(s) replaces reduce(lambda x,y: x+y, s, 0), which was thought to be
>> the most common use of reduce.  Sum(s,start) replaces the much less
>> common reduce(lambda x,y: x+y, s, start).
>> Reduce(S, s), where S = sum function, raises an exception on empty s.
>> So use that and you are no worse off than before.

> What am I doing wrong?
 >>>> S = sum

Taking me too literally out of context.  I meant the sum_of_2 function 
already given in the example above, as you eventually tried.

def S(x,y): return x+y

Sorry for the confusion.

>>>> reduce(lambda x,y:x+y,s)
> 6
>>>> s=[]
>>>> reduce(lambda x,y:x+y,s)
> Traceback (most recent call last):
>   File "<pyshell#17>", line 1, in <module>
>     reduce(lambda x,y:x+y,s)
> TypeError: reduce() of empty sequence with no initial value

These two are exactly what I meant.

> This is supposed to happen. But doesn't reduce(S,s) work
> when s isn't empty?

It did.  You got 6 above.  The built-in 'sum' takes an iterable, not a 
pair of numbers.


More information about the Python-list mailing list