On Sat, Sep 26, 2020 at 7:44 PM Ricky Teachey <ri...@teachey.org> wrote:

> The problem is that there is lots of existing code like this:
>
> def __setitem__(self, index, value): ...
>
> But the new features will almost certainly lead people to write new code
> like this:
>
> d={}
> obj[**d] = "foo"  # no kwd arguments provided here
>
> ...which, if someone does this arbitrarily against classes that use the
> existing kind of code I gave at the first, will call (if the sentinel is ()
> ):
>
> obj.__setitem__((), "foo")  # [Correction by Guido after Ricky's email]
>
> ...which could have all kinds of weird effects rather than giving an
> error, as I think would be better.
>
> Steven's response to that was essentially "well then, don't unpack
> dictionaries against arbitrary subscriptable types" which I fully agree is
> a perfectly legitimate response. But I think having no sentinel at all and
> instead telling people "either provide a default argument for both index
> AND value in your __setitem__ method, or neither" is also a perfectly
> legitimate way forward.
>

As I said there clearly are problems with your solution, because there's no
way to call a function with the first positional argument omitted and the
second positional argument given (and as I have argued, in the presence of
`**kwargs`, index and value *must* be positional-only arguments).

And honestly, if you want to shoot yourself in the foot (or have some use
for it!), you can write
```
d[()] = "foo"
```
in today's Python. Presumably someone who uses `obj[**kwargs]` is doing it
for an object that takes keyword args, so that object must already be
prepared for index being `()`.

PS. Maybe we can just stop debating this PEP? I have a feeling that we're
going around in circles. I think Stefano has some changes that he would
like to see vetted, but the best way to signal an empty index is not one of
them.

-- 
--Guido van Rossum (python.org/~guido)
*Pronouns: he/him **(why is my pronoun here?)*
<http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________
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/SOROPZGO5MUW3NJNPOFXJIWAIGISBJZI/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to