[Python-ideas] Why does `sum` use a default for the `start` parameter?
MRAB
python at mrabarnett.plus.com
Sat Dec 5 19:12:31 CET 2009
Georg Brandl wrote:
> Ram Rachum schrieb:
>>> Sometimes you might find that the list you're summing is empty.
>>> Because 'sum' is most often used with numbers, the default sum of
>>> a list is 0. If you want to sum a list of non-numbers, provide a
>>> suitable start value. For example, to sum a list of lists a
>>> suitable start value is []:
>>>
>>>>>> sum([[0, 1], [2, 3]], [])
>>> [0, 1, 2, 3]
>>>
>>> I agree that it would be nice if the start value could just be
>>> omitted, but then what should 'sum' return if the list is empty?
>>
>> I see the problem. I think a good solution would be to tell the
>> user, "If you want `sum` to be able to handle a non-empty list, you
>> must supply `start`." Users that want to add up a (possibly empty)
>> sequence of numbers will have to specify `start`.
>>
>> If start is supplied, it will work like it does now. If start isn't
>> supplied, it will add up all the elements without adding any
>> `start` to them.
>>
>> What do you think?
>
> (sorry, pressed wrong key)
>
> There is a choice between these two variants:
>
> a) require start for non-numerical sequences
> b) require start for possibly empty sequences
>
> I don't have a preference for either, so for compatibility's sake I
> would vote to keep the current one, which is a). It also stands to
> reason that buggy usage in case b) is harder to detect, since the
> common case will not uncover the bug (the sequence being nonempty),
> while for case a) it does.
>
True, providing start will ensure that the result is of the correct
class, instead of it sometimes being an int, causing a TypeError later
on.
More information about the Python-ideas
mailing list