[Python-Dev] sum(...) limitation
steve at pearwood.info
Sat Aug 2 09:39:12 CEST 2014
On Fri, Aug 01, 2014 at 10:57:38PM -0700, Allen Li wrote:
> On Fri, Aug 01, 2014 at 02:51:54PM -0700, Guido van Rossum wrote:
> > No. We just can't put all possible use cases in the docstring. :-)
> > On Fri, Aug 1, 2014 at 2:48 PM, Andrea Griffini <agriff at tin.it> wrote:
> > help(sum) tells clearly that it should be used to sum numbers and not
> > strings, and with strings actually fails.
> > However sum([[1,2,3],,,[5,6]], ) concatenates the lists.
> > Is this to be considered a bug?
> Can you explain the rationale behind this design decision? It seems
> terribly inconsistent. Why are only strings explicitly restricted from
> being sum()ed? sum() should either ban everything except numbers or
> accept everything that implements addition (duck typing).
Repeated list and str concatenation both have quadratic O(N**2)
performance, but people frequently build up strings with + and rarely do
the same for lists. String concatenation with + is an attractive
nuisance for many people, including some who actually know better but
nevertheless do it. Also, for reasons I don't understand, many people
dislike or cannot remember to use ''.join.
Whatever the reason, repeated string concatenation is common whereas
repeated list concatenation is much, much rarer (and repeated tuple
concatenation even rarer), so sum(strings) is likely to be a land mine
buried in your code while sum(lists) is not. Hence the decision that
beginners in particular need to be protected from the mistake of using
sum(strings) but bothering to check for sum(lists) is a waste of time.
Personally, I wish that sum would raise a warning rather than an
As for prohibiting anything except numbers with sum(), that in my
opinion would be a bad idea. sum(vectors), sum(numeric_arrays),
sum(angles) etc. should all be allowed. The general sum() built-in
should accept any type that allows + (unless explicitly black-listed),
while specialist numeric-only sums could go into modules (like
More information about the Python-Dev