On 2019-01-28 18:22, David Mertz wrote:
On Mon, Jan 28, 2019 at 8:44 PM Jamesie Pic <j...@yourlabs.org
<mailto:j...@yourlabs.org>> wrote:

    ['cancel', name].join('_')


This is a frequent suggestion.  It is also one that makes no sense
whatsoever if you think about Python's semantics.  What would you expect
to happen with this line:

['foo', b'foo', 37, re.compile('foo')].join('_')

  List are not restricted to containing only strings (or things that are
string-like enough that they might play well with joining).  Growing a
method that pertains only to that specialized sort of list breaks the
mental model of Python.  Moreover, there is no way to TELL if a
particular list is a "list of strings" other than checking each item
inside it (unlike in many languages).

That problem already exists with str.join though. It's just currently spelled this way:

','.join(['foo', b'foo', 37, re.compile('foo')])

. . . and the result is an error. I don't see how it's semantically any less sensible to call list.join on a list of non-string things than it is to pass a list of non-string things to str.join.

Personally what I find is perverse is that .join is a method of strings but does NOT call str() on the items to be joined. The cases where I would have been surprised or bitten by something accidentally being converted to a string are massively outweighed by the cases where I want everything to be converted into a string, because, dangit, I'm joining them into a bigger string.

I agree that a list method would be nice, but we then have to think about should we add similar methods to all iterable types, since str.join can take any iterable (not just a list).

--
Brendan Barnwell
"Do not follow where the path may lead. Go, instead, where there is no path, and leave a trail."
   --author unknown
_______________________________________________
Python-ideas mailing list
Python-ideas@python.org
https://mail.python.org/mailman/listinfo/python-ideas
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to