On Sun, Jul 12, 2020 at 11:04 AM Guido van Rossum <gu...@python.org> wrote: > > 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 > >>> > ``` >
Ah, okay. My "obvious" intuition was that this wouldn't assign, and Greg's equally "obvious" intuition was that it would. I think that disagreement should be a strike against the "Point(?x, x)" notation - I can't be the only person who would misinterpret it. ChrisA _______________________________________________ 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/DT2RBMJ2BO2FG5PBWCNGID2DPYYMVQV5/ Code of Conduct: http://python.org/psf/codeofconduct/