On Mon, Mar 25, 2019 at 12:28 AM Jonathan Fine <jfine2...@gmail.com> wrote:
>
> Disclaimer: I've not recently read any discussions of this topic. And 
> everything I say is my own opinion.
>
> SUMMARY
> The syntax of Python's string join operator are a consequence of Python's 
> core design decisions and coding principles, together with the semantics of 
> join. I'll explain this in a series of posts.
>
> Why str.join? Wouldn't list.join be better?
> ===============================
> Python variables don't have types. Python objects do have types. When writing 
> Python, don't test for the type of an object, unless you have to. Instead, 
> test to see if the object has the methods you need.
>
> Eg help(dict.update)
> update(...)
>     D.update([E, ]**F) -> None.  Update D from dict/iterable E and F.
>     If E is present and has a .keys() method, then does:  for k in E: D[k] = 
> E[k]
>     If E is present and lacks a .keys() method, then does:  for k, v in E: 
> D[k] = v
>     In either case, this is followed by: for k in F:  D[k] = F[k]
>
> Now for the semantics of string join. By Python principles
>     From a str and an iterable
>     The string join operator
>      Produces a str
>
> You question amounts to this. Should the signature be
>     (str, iterable) -> str    # Informal type signature of join.
> or should it be
>     (iterable, str) -> str
>
> At first glance, there's no way of choosing. But in Python we prefer
>     aaa.join(bbb)
> to
>     from somewhere import join
>     join(aaa, bbb)
>
> So the question now becomes: Choose between
>     str.join(iterable)
>     iterable.join(str)
>
> There is some sense in having list.join. But in Python, we can't join the 
> elements of a list without getting an iterable from the list (unless there's 
> something like very special short-cut-semantics built into Python).
>
> So in Python the choice is between
>     str.join(iterable)
>     iterable.join(str)
>
> Now str.join looks more attractive. But I said, without thinking ahead, that 
> the syntax of Python's string join operator is a consequence of Python's core 
> design decisions and coding principles, together with the semantics of join.
>
> I'm not quite there yet, there's a gap to fill.  I'll pause for a day or two 
> now, just in case someone else wants to JOIN in the discussion, and perhaps 
> fill the gap.
>

It's way WAY simpler than all this. "Iterable" isn't a type, it's a
protocol; in fact, "iterable" just means "has an __iter__ method".
Adding a method to iterables means adding that method to every single
object that wants to be iterable, but adding a method to strings just
means adding it to the str type.

And, this is a topic for python-list, not python-ideas, unless someone
is proposing a change.

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/

Reply via email to