Hello Python Devs,
For some time I've been hoping to be able to use pattern matching in
Python, so PEP 622 is an exciting proposition. I do have some concerns,
mostly about the syntax, because it doesn't currently match the style the
rest of Python seems to lay out.

The thing I'd most suggest changing is the syntax for constants within
patterns from `.CONSTANT`. Dots can already be in patterns as part of
attribute access, so the viewer will need to distinguish between different
uses when they see one. Instead I propose an at-symbol, like `@CONSTANT`.
The `@` is a symbol used in Python syntax already, so it would not require
changes to the tokeniser. However, it can never currently appear in
patterns; neither decorators nor the matmul operator would create any
ambiguity for a human trying to skim over a pattern, unlike the currently
proposed syntax. The `@` does share a downside with the dot, which is lack
of precedent. The PEP alludes to `.name` having an entirely different use
in imports, and the use of `@name` in decorators does not relate to this
new pattern syntax either. All the same, `@` would still make for a clearer
symbol because it would be more distinct from attributes. (There is a weak
argument that `@CONSTANT` already has a precedent because of its use in
decorators, because decorators are names that are used at the top level,
and because the `@CONSTANT` syntax in patterns would mostly also refer to
top level names. However, users will adapt to whichever syntax is settled
on.)

I have two aesthetic suggestions, which have smaller impacts on clarity
than the above. Firstly, replacing `|` for delimiting patterns with the
more explicit keyword `or`. Python favours keywords where other languages
might use punctuation, such as `range(1, 10)` rather than `1..10`, because
full words are closer to natural language than punctuation is. Secondly, I
prefer the look of `(_, _) as point` over `point := (_, _)` for named
sub-patterns. This one is harder to justify because it's a personal
preference. All the same, it's worth considering if you haven't already
done so.

Finally, I dislike the way the underscore variable name seems like magic.
That is, it is a variable name that behaves differently from other names. I
recognise that there is a history of Python code treating `_` differently —
such as referring to the previous result in the REPL — and I can't offer
any better alternatives, just my opinion.
I hope you consider these perspectives, especially the change from
`.CONSTANT` to `@CONSTANT`. I'm anxious to get my hands on pattern matching
syntax, in whatever form it eventually takes.

Best wishes,
IFcoltransG
_______________________________________________
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/JJMQEWZEAF224BEYBUJTYUNP4B5PAEZJ/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to