[Python-Dev] Rationale for sum()'s design? (original) (raw)

Tim Peters tim.peters at gmail.com
Wed Mar 16 03:23:47 CET 2005


[Alex Martelli]

I'm reasonably often using sum on lists of datetime.timedelta instances, "durations", which ARE summable just like numbers even though they aren't numbers. I believe everything else for which I've used sum in production code DOES come under the general concept of "numbers", in particular X+0 == X. Unfortunately, this equation doesn't hold when X is a tiwmedelta, as X+0 raises an exception then.

I count timedeltas "as numbers" too -- or at least I did when sum() was being designed, cuz I asked for the optional start= argument, and precisely in order to sum things like this (timedelta was indeed the driving example at the time).

I can't say it bothers me to specify an appropriate identity element when 0 is inappropriate. If it switched to ignoring the start= argument unless the sequence was empty, that would be OK too, although I think

sum(seq, start=0)  same-as  start + seq[0] + seq[1] + ...

will always be easiest to explain, so all else being equal I prefer current behavior.

The number of times I've passed a sequence to sum() with elements that were lists, tuples, or any other kind of object with a "concatenate" meaning for add is zero so far.



More information about the Python-Dev mailing list