[Python-ideas] Make map() better

Steven D'Aprano steve at pearwood.info
Wed Sep 13 22:55:47 EDT 2017


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
x.len()

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. 



-- 
Steve


More information about the Python-ideas mailing list