Nick Coghlan wrote:
case (.x, .y) as p, q: # Attribute matching
I don't think I like the "as". Like the "?=", it separates the pattern from the names being bound too much.
case (["x"], ["y"]) as p, q: # Item matching
That's even more confusing. The part before the "as" looks like it should match a tuple of two one-element lists containing the values "x" and "y". My feeling is that the patterns should look like constructors. The archetypal constructor for a mapping object is the dict display, so a pattern that matches a mapping having particular keys would be case {"x": p, "y": q}: ...
case MATCH_PATTERN [as TARGET] [and CONDITION]:
That way of handling guards wouldn't allow for multiple guards on the same case. I would suggest case PATTERN: when CONDITION: ... when CONDITION: ... Note that this would be different from case PATTERN: if CONDITION: ... elif CONDITION: ... because failure of all the "when" clauses should cause the next case to be tried. -- Greg