We have examined every possible permutation already, I think this would be a distraction to pursue.
On Thu, Feb 4, 2021 at 04:20 Walter Dörwald <wal...@livinglogic.de> wrote: > On 2 Feb 2021, at 12:36, Stefano Borini wrote: > > Hi all, > > I would like to request feedback by python-dev on the current > implementation of PEP 637 - Support for indexing with keyword > arguments. > > https://www.python.org/dev/peps/pep-0637/ > > The PEP is ready for SC submission and it has a prototype > implementation ready, available here (note, not reviewed, but > apparently fully functional) > > > https://github.com/python/cpython/compare/master...stefanoborini:PEP-637-implementation-attempt-2 > > (note: not sure if there's a preference for the link to be to the diff > or to the branch, let me know if you prefer I change the PEP link) > > It seems to me, that what complicates the specification is the need for > backwards compatibility. If that wasn't an issue, we could make indexing > operations behave exactly like function calls. Handling the additional > argument for __setitem__ could be done the same way that passing self in > a method call is done: By passing an additional positional argument (in > this case as the second argument after self), So: > > - foo[1] is type(foo).__getitem__(foo, 1) > - foo[1, 2] is type(foo).__getitem__(foo, 1, 2) > - foo[(1, 2)] is type(foo).__getitem__(foo, (1, 2)) > - foo[1] = 3 is type(foo).__setitem__(foo, 3, 1) > - foo[1, 2] = 3 is type(foo).__setitem__(foo, 3, 1, 2) > - foo[(1, 2)] = 3 is type(foo).__setitem__(foo, 3, (1, 2)) > > But of course this isn't backwards compatible with respect to the > treatment of tuple arguments and the argument order in __setitem__. > However it is *much* easier to remember and to teach. > > The PEP rejects the idea to implement this approach via a new set of > dunder methods (e.g. __getitem_ex__, __setitem_ex__ and __delitem_ex__) > for performance reasons, but would it make sense, to mark existing > __getitem__, __setitem__ and __delitem__ methods as supporting the new > calling convention via a decorator? i.e something like: > > class X: > @newstyle_item > def __getitem__(self, x, y, z=42): > ... > > @newstyle_item > def __setitem__(self, value, x, y, z=42): > ... > > @newstyle_item > def __detitem__(self, x, y, z=42): > ... > > This wouldn't require an additional dictionary lookup, but just a check of > a bit in the function object. > > Thank you for your help. > > Servus, > Walter > _______________________________________________ > Python-Dev mailing list -- python-dev@python.org > To unsubscribe send an email to python-dev-le...@python.org > https://mail.python.org/mailman3/lists/python-dev.python.org/ > Message archived at > https://mail.python.org/archives/list/python-dev@python.org/message/DTOO36EXJRBGA7OJVTRAE7I43D2FR7BS/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- --Guido (mobile)
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/EACMAG7WM25KPSNHSEGW5M4K2WL2B6MV/ Code of Conduct: http://python.org/psf/codeofconduct/