On Fri, Jul 10, 2020 at 2:33 PM Steven D'Aprano <st...@pearwood.info> wrote:
> On Fri, Jul 10, 2020 at 11:52:19AM +0100, Jonathan Fine wrote: > > > FUTURE > > Let's proceed. We continue to use d = Dummy(). Given that > > >>> key = d[1, 2, 3, a=4, b=5] > > is allowed, what should we be able to say about the key. Clearly it > should > > be an instance of a class > > That's not clear at all. > > Subscripting is just syntactic sugar for a method call, `__getitem__`, > and we already know how to associate positional and keyword arguments to > method calls. No special magic class is needed. > ... > There would be difficulty with positional arguments, since they are > already parsed as a tuple: > > py> {(1,2): 999}[1,2] > 999 > > so this may rule out adding multiple positional arguments to > subscripting syntax. But I don't think there is any backwards > compatibility issue with adding keyword arguments. > Jonathan already pointed out that positional arguments are passed as a tuple: Here goes: >>> d = Dummy() > >>> d[1] > ((1,), {}) > >>> d[1, 2] > (((1, 2),), {}) > >>> d[:] > ((slice(None, None, None),), {}) > >>> d['a':'b'] > ((slice('a', 'b', None),), {}) > We see that the interpreter passes to __getitem__ a single positional > argument (which is usually called the key). This is another difference > between d[something] and f(something). I believe he was saying it would be weird if `d[1, 2]` called `d.__getitem__((1, 2))` but `d[1, 2, x=3]` called `d.__getitem__(1, 2, x=3)`. More generally, if `__getitem__` always receives a single positional argument now, it should probably stay that way for consistency.
_______________________________________________ Python-ideas mailing list -- python-ideas@python.org To unsubscribe send an email to python-ideas-le...@python.org https://mail.python.org/mailman3/lists/python-ideas.python.org/ Message archived at https://mail.python.org/archives/list/python-ideas@python.org/message/EMJSDLKJ3FPXZNBMZJFZ4I5L34DKAVG3/ Code of Conduct: http://python.org/psf/codeofconduct/