I can see custom mapping types where iterating the keys() would be trivial, but items() could be expensive. I could use that as an argument, but I don't have to. The keys() method is part of the API, just like index() and count() are part of the sequence API. To be treated like a mapping everywhere, python requires that you define* a keys() method, so why not use it? I don't see anything wrong with python using "public" methods, in this context.
* If you use ABCs, then you don't need to define keys(), but that’s a tangent. > -----Original Message----- > From: Python-ideas <python-ideas-bounces+tritium- > [email protected]> On Behalf Of Elias Tarhini > Sent: Monday, September 10, 2018 10:04 PM > To: Python-Ideas <[email protected]> > Subject: [Python-ideas] __iter__(), keys(), and the mapping protocol > > This has been bouncing around in my head for a while regarding the requisite > keys() method on mappings: > > How come the ** unpacking operator, a built-in language feature, relies on a > non-dunder to operate? > > To me, I mean to say, requiring that classes implement keys() – a method > whose name is totally undistinguished – in order to conform to the mapping > protocol feels like a design running counter to Python's norm of using > dunders for everything "hidden". I am not sure if it feels dirty to anybody > else, however. Interestingly, the docs already say > <https://docs.python.org/3/reference/datamodel.html#object.__iter__> > that [f]or mappings, [__iter__()] should iterate over the keys of the > container, but it of course is not enforced in any way at present. > > > So, then — how about enforcing it? Should __iter__(), for the reasons > above, replace the current purpose of keys() in mappings? > > > I'm not properly equipped at the moment to mess around with CPython > (sorry), but I assume at a minimum this would entail either replacing all > instances of PyMapping_Keys() with PyObject_GetIter() or alternatively > changing PyMapping_Keys() to call the latter. > > > Does it sound like a reasonable change overall? > > > Eli _______________________________________________ Python-ideas mailing list [email protected] https://mail.python.org/mailman/listinfo/python-ideas Code of Conduct: http://python.org/psf/codeofconduct/
