On Sat, Jul 11, 2020 at 5:58 PM Chris Angelico <ros...@gmail.com> wrote:

> On Sun, Jul 12, 2020 at 10:30 AM Greg Ewing <greg.ew...@canterbury.ac.nz>
> wrote:
> >
> > Just had another thought about marking assignment targets.
> >
> > The PEP currently forbids repeating bound names in a pattern
> > to avoid raising expectations that
> >
> >      case Point(x, x):
> >
> > would match only if the two arguments were equal.
> >
> > But if assignment targets were marked, we could write this as
> >
> >      case Point(?x, x):
> >
> > and it would work as expected.
>
> Hang on. Matching happens before assignment, so this should use the
> previous value of x for the matching. At least, that's my
> understanding. If you do something like:
>
> case Point(x, 2):
>
> it won't assign x unless the second coordinate is 2, right?
>

Good catch. That's actually undefined -- we want to let the optimizer have
some leeway in how to generate  the best code for matching. See
https://www.python.org/dev/peps/pep-0622/#performance-considerations

Currently it doesn't optimize all that much -- it just processes patterns
from left to right:
```
>>> match Point(3, 3):
...   case Point(x, 42): pass
...
>>> print(x)
3
>>>
```

-- 
--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-Dev mailing list -- python-dev@python.org
To unsubscribe send an email to python-dev-le...@python.org
https://mail.python.org/mailman3/lists/python-dev.python.org/
Message archived at 
https://mail.python.org/archives/list/python-dev@python.org/message/7CZXK6ECT6MKLEUTMRFXFCF54RZ4G72H/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to