On Tue, Jan 29, 2019 at 4:48 PM David Mertz <me...@gnosis.cx> wrote: > In the first case, the object (a heterogenous list) can NEVER support a > .join() method. It's simply the wrong kind of object. Of course, it's right > as far as the basic type system goes, but its deeper (maybe "structural") > type cannot support that method. > > On the other hand, sure, almost any function, including methods, will choke > on bad arguments. But no string *object* rules out joining if good arguments > can be found. > > I am sure readers will immediately reply, "what about list.sort()?" > Unfortunately, that really will simply fail on lists of the wrong "type." > After all these years, I still think that change in Python 2.3 or so was the > wrong choice (for those with fewer gray hairs: when the hills were young, > Python objects were arbitrarily comparable under inequality, even when the > answer didn't "mean" anything). >
Considering that you can provide a key function to sort(), there is by definition no list of objects which utterly cannot be sorted. That said, though, I don't think this is an overly strong argument. The main reason lists don't have a join method is that str.join() can take *any iterable*, so it's perfectly legal to join tuples or generators without needing to listify them. Consider: # Join the parts, ignoring empty ones "_".join(filter(None, parts)) c = collections.Counter(...) "_".join(item for item, count in c.most_common()) # solving Brendan's complaint of perversity "_".join(map(str, stuff)) If these were flipped around, you'd have to explicitly call list() on them just to get a join method. BTW, Ronie: I would disagree. Python uses syntactic elements only where functions are incapable of providing equivalent functionality. That's why print became a function in 3.0 - it didn't need to be magical syntax any more. ChrisA _______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/