On 23/06/2020 20:35, Chris Angelico wrote:
On Wed, Jun 24, 2020 at 5:30 AM Rob Cliffe via Python-Dev firstname.lastname@example.org wrote:
The PEP is great, but this strikes me as horribly confusing, given that 401|403|404 is already legal syntax. IIUC any legal expression can come between `case` and `:`, but expressions that contain `|` at their outermost level are interpreted differently than from in other contexts. Presumably adding parentheses: case (401|403|404): would make it equivalent to case 407:
Is a separator (other than whitespace) actually needed? Can the parser cope with case 401 403 404:
Failing that IMO preferable, albeit not ideal, possibilities would be
- Use colon as the separator.
- Use comma as the separator - this is already legal syntax too, but IMO it reads more naturally. (And IIRC there are already contexts where brackets are necessary to indicate a tuple.)
Perhaps someone can think of something better.
I also (with others) prefer `else:` or perhaps `case else:` to using the`_` variable. The latter is obscure, and woudn't sit well with code that already uses that variable for its own purposes.
It's not really arbitrary expressions, though. It's more like an assignment target list, but with some handling of constants.
case (x, y):
is very similar to
(x, y) = ...
If arbitrary expressions are not allowed - the power of this new feature is reduced - we have to remember another set of rules about what is allowed and what isn't. Just as we did with decorator syntax - until that restriction was done away with.