Stephen Hansen wrote:


On Fri, Oct 16, 2009 at 8:39 AM, Alan G Isaac <alan.is...@gmail.com <mailto:alan.is...@gmail.com>> wrote:

    I expected this to be fixed in Python 3:

                sum(['ab','cd'],'')

    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    TypeError: sum() can't sum strings [use ''.join(seq) instead]

    Of course it is not a good way to join strings,
    but it should work, should it not?  Naturally,

                '' + 'ab' + 'cd'

    'abcd'

    Why doesn't duck typing apply to `sum`?


Because it would be so hideously slow and inefficient that it'd be way too easy a way for people to program something they think should work fine but really doesn't... alternatively, the function would have to do two /completely/ different implementations based on what you're passing in, and that violates duck typing too :)

Duck typing isn't an absolute. Sum's not broken... This is a "practicality beats purity" thing; maybe sum should just add up everything passed to it and as long as no errors happen, return the result. But in practice, if someone passes sequences of strings to it, it'd create/destroy so many strings (which is way more expensive then just creating and destroying successive integers), people would be making really bad code-decisions even when it seems a perfectly valid thing to do.

It checks to see whether you're trying to sum strings, so it's already
treating them as a special case. Why can't it just use str.join
internally instead in that case instead of raising an exception?
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to