> 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 <pyt...@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@python.org > https://mail.python.org/mailman/listinfo/python-ideas > Code of Conduct: http://python.org/psf/codeofconduct/ > -- Antoine Rozo
_______________________________________________ Python-ideas mailing list Python-ideas@python.org https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/