> Why is it ','.join(iterable), why isn't there join(',', iterable)

Because join apply on a string, and strings are defined by the str class, not by a specific protocol (unlike iterables).

2017-09-14 18:43 GMT+02:00 MRAB <python@mrabarnett.plus.com>:
On 2017-09-14 03:55, Steven D'Aprano wrote:

On Wed, Sep 13, 2017 at 11:05:26PM +0200, Jason H wrote:

> And look, map() even works with all of them, without inheritance,
> registration, and whatnot. It's so easy!

Define easy.

Opposite of hard or difficult.

You want to map a function?

map(function, values)

is all it takes. You don't have to care whether the collection of values
supports the map() method, or whether the class calls it "apply", or
"Map", or something else. All you need care about is that the individual
items inside the iterable are valid for the function, but you would need
to do that regardless of how you call it.

[1, 2, 3, {}, 5].map(plusone)  # will fail

It's far easier for me to do a dir(dict) and see what I can do with it.

And what of the functions that dict doesn't know about?

 This is what python does after all. "Does it have the interface I expect?" Global functions like len(), min(), max(), map(), etc(), don't really tell me the full story. len(7) makes no sense. I can attempt to call a function with an invalid argument.

And you can attempt to call a non-existent method:

x = 7

Or should that be length() or size() or count() or what?

[].len() makes more sense.

Why? Getting the length of a sequence or iterator is not specifically a
list operation, it is a generic operation that can apply to many
different kinds of things.

Python is weird in that there are these special magical globals

The word you want is "function".

that operate on many things.

What makes that weird? Even Javascript has functions. So do C, Pascal,
Haskell, C++, Lisp, Scheme, and thousands of other languages.

Why is it ','.join(iterable), why isn't there join(',', iterable) At what point does a method become a global? A member? Do we take the path that everything is a global? Or should all methods be members? So far it seems arbitrary.

Okay, its arbitrary.

Why is it called [].len instead of [].length or {}.size? Why None
instead of nil or null or nul or NULL or NOTHING?

Many decisions in programming languages are arbitrary.

In Java, strings have .length(), arrays have .length, and collections have .size().

Python-ideas mailing list
Code of Conduct: http://python.org/psf/codeofconduct/

Antoine Rozo