I wrote:
Tino Wildenhain wrote:
[...]
sum(['a','b'],'')

<type 'exceptions.TypeError'>: sum() can't sum strings [use ''.join(seq) instead]

Yes which is a bit bad anyway. I don't think hard wiring it is such a nice idea. You know, walks like a duck, smells like a duck...
If it makes sense to handle things differently for performance, then
please have it doing it silently, e.g. when it detects strings just
use join() internally.

Cheers
Tino

+1

''.join is horrible. And it adds insult to injury that S.join(S.split(T)) != T as a rule. The interpreter has no business to patronize us into this shamefully contorted neighborhood while it understands what we want.

What makes ''.join particularly horrible is that we find ourselves forced to use it not only for concatenating arbitrary-length strings in a list, but also to convert to a str what's already a sequence of single characters. IOW string types fail to satisfy a natural expectation for any S of sequence type :

S == type(S)(item for item in S) == type(S)(list(S))

And this, even though strings are sequence types deep-down-ly enough that they achieve to act as such in far-fetched corner cases like

(lambda *x : x)(*'abc')==('a','b','c')

...and even though strings offer not one but two distinct constructors that play nicely in back-and-forth conversions with types to which they are much less closely related, ie.

'1j' == repr(complex('1j') == str(complex('1j'))
1j == complex(repr(1j)) == complex(str(1j))

Not-so-cheerfully-yours, BB

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to