On Mon, Oct 26, 2020 at 04:56:24AM -0000, Dennis Sweeney wrote:

> What if the mapping assignment were more harmonious with the pattern matching 
> PEP? Something like this:
> 
>     items = {'eggs': 2, 'cheese': 3, 'spam': 1}
>     {'eggs': eggs, 'spam': i_dont_need_to_name_this_spam, **rest} = items
>     assert i_dont_need_to_name_this_spam == 1
>     assert eggs == 2 and cheese == 3
>     assert rest == {'cheese': 3}

I see Guido likes this. I guess I could learn to live with it, but it 
seems a bit verbose to my taste.

On the other hand, it does make the capture target independent of the 
key, and supports arbitrary keys:


    items = {'key': 'A', None: 'B', 5: 'C'}
    {5: spam, None: eggs, 'key': aardvark} = items
    assert spam == 'C'
    assert eggs == 'B'
    assert aardvark == 'A'


So I think on balance I would give this a +1.

> The keys here could be arbitrary hashables and the "values" could be 
> arbitrary assignment targets (assigned all-or-nothing).

"All or nothing" is a stronger promise than iterable unpacking provides.


    py> a = [None]*5
    py> a[0], a[1], a[9999], a[2] = "abcd"
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    IndexError: list assignment index out of range
    py> a
    ['a', 'b', None, None, None]


I think we can promise that:

* if the mapping on the right has missing keys, no assignments occur;

* if the mapping on the right has extra keys, and there is no double 
  star target to capture the extras, then no assignments occur;

* otherwise, assignments occur from left to right.



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

Reply via email to