I should add that I accidentally left out a word. It should be “... liable to *overwrite* any or all names ...”
On Sun, Feb 14, 2021 at 12:10 Abdulla Al Kathiri < alkathiri.abdu...@gmail.com> wrote: > That makes sense. As Guido mentioned, this is similar to reusing a > variable in a for-loop. You do it at your own risk. Ok consider me > convinced. I will use the following sentence to explain name binding in > partial matching: > *“Match statements are liable to any or all names bound in any of the > patterns used, and your code is incorrect if you aren't prepared for that."* > > > On 14 Feb 2021, at 7:20 PM, Chris Angelico <ros...@gmail.com> wrote: > > On Sun, Feb 14, 2021 at 11:26 PM Abdulla Al Kathiri > <alkathiri.abdu...@gmail.com> wrote: > > > My idea was that in the case of partial matching or full matching without > passing the guard, the binding names has some sort of self destruction and > return to the previous state. Using different variable names would resolve > the issue and if I want to modify the global variables, I could choose to > do so in the case block after the case succeeded. At least, this way, it > would be more explicit, conveying the person intention (or forgetting if > the original global value was later needed). I saw many people online > talking about this the last couple of days so I thought I would bring it up > here. Any other syntax variant could be used to achieve the same thing. > > > It's not about syntax. Python doesn't have an idea of "self > destruction and return to the previous state". The nearest equivalent > is a very special case at the end of an exception handler, where after > "except Exception as e:" you'll get an implicit "e = None; del e" to > prevent a refloop. That's not a return to the previous state, that's a > conscious clearing of one reference. > > If this "unwinding" were desired, the best way would be to simply make > it a permanent part of the match semantics - no syntax for selecting > which behaviour you want. There's no backward compatibility to be > maintained (yet). But that would be inconsistent with the rest of > Python, where things happen step by step, and if something breaks, > everything prior to it has happened. > > ChrisA > _______________________________________________ > 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/5K65WY7B6O7EO5ZKWZZCS3OYV2HCIBQJ/ > Code of Conduct: http://python.org/psf/codeofconduct/ > > > _______________________________________________ > 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/LQWGSE7DYQHXQQCVJDDRXROZ7WHYDHQQ/ > Code of Conduct: http://python.org/psf/codeofconduct/ > -- --Guido (mobile)
_______________________________________________ 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/CXLTVIRD3BWQIQTQMKQXR7NWJ7Y6I6SI/ Code of Conduct: http://python.org/psf/codeofconduct/