On Sat, Jul 18, 2020 at 05:30:40PM +0100, MRAB wrote:

> I haven't followed this thread for a while, but, to me, it seems that 
> the simplest option would be to pass the keyword arguments as a dict:

What are you going to do with that keyword argument dict?

Most use-cases I can think of will have to unpack the dict into named 
parameters. (Just as the interpreter does for us, in function calls.)

When I'm writing functions, for every one use of `**kwargs`, I have 
about a hundred uses of named parameters. I'm pretty sure most people 
are similar. I don't think that keyword args in subscripts will be 
different. I'm pretty sure that nearly everyone will want to unpack the 
`**kwargs` into named parameters nearly all of the time.

So why force them to do the unpacking themselves when the interpreter 
already has all the machinery to do it?

If you want kwargs to collect arbitrary keyword arguments, you can just 
declare your getitem method (and setitem and delitem if needed) to take 
`**kwargs`, and the interpreter will oblige.

If you want no keyword arguments at all, you don't have to change a 
thing. Your getitem (etc) methods have no keyword parameters, so using 
keywords in the subscript will fail with TypeError.


>     obj[a, b:c, x=1] does obj.__getitem__((a, slice(b, c)), dict(x=1))

I don't think that is either simpler or more useful than a straight- 
forward binding of arguments to parameters, just as function calls 
already do:

    obj[a, b:c, x=1] ==> obj.__getitem__((a, slice(b, c)), x=1)

It's unfortunate that positional subscripts are bundled together into a 
tuple. I have resisted calling that design a "mistake" because I don't 
know the reason for the design. There was probably a good reason for it, 
back in the ancient history of Python when getslice and getitem were 
unified. But I am sure that it will be a horrible mistake to emulate 
that decision for keyword arguments.

If anyone wants or needs their keyword arguments to be bundled into a 
single kwargs parameter, you can have it. All you need do is declare 
your method with a `**kwargs` parameter, and the interpreter will do the 
rest.



-- 
Steven
_______________________________________________
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/5MAWLGDJCVM62N7CKKY3C5DBYKVTWZHC/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to