On Sun, 8 May 2022 at 22:09, Valentin Berlier <[email protected]> wrote:
>
> A while ago there was a discussion about allowing "match" patterns for the
> walrus operator. This would cover iterable unpacking as you suggested along
> with all the patterns allowed in match statements.
>
> if [x, y, z] := re.match(r"...").groups():
> print(x, y, z)
>
> The walrus expression would evaluate to None if the pattern on the left can't
> be matched.
>
What if it does match, though? That's a little less clear. I like the
idea, but I'm not entirely sure what this should do, for instance:
print( {"x": x} := some_dict )
Clearly it should assign x to some_dict["x"] if possible, but then
what should get printed out? A small dict with one key/value pair? The
original dict? There would need to be a guarantee that the return
value is truthy, otherwise it'll create bizarre situations where you
try to match and it looks as if the match failed.
By the way: With any proposal to further generalize assignment
expressions, it'd be good to keep in mind the "implicit nonlocal"
effect that they currently have with comprehensions:
>>> def f():
... x, y = "old x", "old y"
... print([(x := "new x") for y in ["new y"]])
... return x, y
...
>>> f()
['new x']
('new x', 'old y')
>>>
My best guess is that this effect should be extended to any simple
names that could _potentially_ be assigned to, even if (as in the case
of some match expressions) they might not all actually be assigned to.
ChrisA
_______________________________________________
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/UCGT2ZSA6Y5DOMMRJE7LVJGZXRRDAU45/
Code of Conduct: http://python.org/psf/codeofconduct/