[Python-ideas] Make map() better

Antoine Rozo antoine.rozo at gmail.com
Thu Sep 14 13:38:34 EDT 2017


> 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 at 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
>> 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.
>>
>> In Java, strings have .length(), arrays have .length, and collections
> have .size().
>
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> https://mail.python.org/mailman/listinfo/python-ideas
> Code of Conduct: http://python.org/psf/codeofconduct/
>



-- 
Antoine Rozo
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-ideas/attachments/20170914/a1d11fbf/attachment-0001.html>


More information about the Python-ideas mailing list