On 12/4/20 11:15 AM, Jim J. Jewett wrote:

To be more specific, I'm not sure what is intended for the 2nd or 3rd case below, which 
reuse a variable "bound" by the first (failed) match.  Nor am I sure whether it 
matters that the first match fails on the guard predicate, instead of immediately on the 
match.

Here's my understanding of it:

     case (a, b, c) if f():  # assume f() returns false

a, b, and c and are initially bound from matches to the object in question, whether they remain bound after f() fails is implementation dependent and should not be relied upon

     case (a, b) if a == c:  # is a still bound from case above?  Is that 
implementation-dependent?

a and b are initially bound from matches to the object in question, and the `a` in `a == c` has that new value; `c`, however, could be the `c` from the first, failed, match -- presumably this is simply a bug in the above match block because it seems like a bad idea to overwrite an already present variable (`c` in this case) in a first match when later matches depend on it.

     case (d = a):  # is a still bound from case above?  Is that 
implementation-dependent?  Is it even still possible to put restrictions in 
before the guard clause, like d=4?

`a` is bound to the `d` attribute of the match object.

The implementation defined aspect is whether names remain bound after match and/or guard failures. In the above code that uncertainty only affects the name `c` as it's the only one used both inside one match and in a guard in a different match.

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

Reply via email to