Guido wrote:
> I think it’s a reasonable idea and encourage you to start working on a
> design for the API and then a PRP.
>
In this post, I explore how the new API might interact with dict objects.
(I think PRP is a typo for PEP.)
Here is an example of the present behaviour
>>> d = dict()
>>> d[x=1, y=2] = 3
SyntaxError: invalid syntax
with the syntax error occurring at the first '=' symbol.
So what should be the new behaviour of:
>>> d = dict()
>>> d[x=1, y=2] = 3
To me, it is clear that we won't get a syntax error. This is because the
proposal implies that
>>> d[x=1, y=2] = 3
executes without error, for some values of 'd'.
If these two lines
>>> d = dict()
>>> d[x=1, y=2] = 3
execute without error, then I would the expect
>>> len(d)
1
>>> d[x=1, y=2]
3
I would further expect
>>> k = list(d.keys())[0]
to give an object 'k', with the property
>>> d[k]
3
This object 'k' corresponds to the source code fragment
x=1, y=2
in
d[x=1, y=2]
and I would expect 'k' to work as a key in any instance of dict.
Here is something that might help the reader. It is that current Python
gives
>>> d = dict()
>>> d['x=1', 'y=2'] = 3
>>> list(d.keys())[0]
('x=1', 'y=2')
and we are looking for an analogous object for
>>> d[x=1, y=2] = 3
To summarize and slightly extend the above. If
>>> d = dict()
>>> d[x=1, y=2] = 3
executes without error, then there is an object 'k' such that
>>> d[x=1, y=2] = 5
>>> d[k] = 5
are equivalent. (This object 'k' is the key in the collection of (key,
value) pairs that are the entries in the dict.)
Aside: The key object, if it exists, has a type. Whether this type is a new
type or an existing type is an implementation question. This message is
focussed on the user experience.
To conclude: If d[x=1, y=2] is allowed for 'd' a dict then consistency with
the current dict behaviour requires the existence of a key object that
corresponds to the fragment 'x=1, y=2'.
Finally, I have tried to be both clear and concise. I hope my contribution
helps.
--
Jonathan
_______________________________________________
Python-ideas mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at
https://mail.python.org/archives/list/[email protected]/message/JZAY2VWTGYSAG6LILU57LUEPM6DUYEYZ/
Code of Conduct: http://python.org/psf/codeofconduct/