-
-
Notifications
You must be signed in to change notification settings - Fork 31.9k
bpo-42128: Add what's new section for PEP 634 (pattern matching) #24588
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
The simplest form compares a subject value against one or more literals:: | ||
|
||
def http_error(status): | ||
match status: | ||
case 400: | ||
return "Bad request" | ||
case 404: | ||
return "Not found" | ||
case 418: | ||
return "I'm a teapot" | ||
case _: | ||
return "Something's wrong with the Internet" | ||
|
||
Note the last block: the "variable name" ``_`` acts as a *wildcard* and | ||
never fails to match. | ||
|
||
You can combine several literals in a single pattern using ``|`` ("or"):: | ||
|
||
case 401 | 403 | 404: | ||
return "Not allowed" |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This example has some problems, as mentioned in https://bugs.python.org/issue42128#msg387371:
I've seen too many knee-jerk reactions over the past weeks along the lines of "the new switch feature can't handle named constants!".
Interestingly I haven't seen such reactions, I've just seen a lot of (mostly) positive responses to my tweet linking to this same tutorial: https://twitter.com/gvanrossum/status/1361124478671933443. (Admittedly, there were negative reactions too, including "the worst pep of the python history." But I didn't see anything about named constants.)
Guido, thanks for updating what's new. What do you think of adding a small FAQ section in the what's new too? Or just mentioning that the new statements use soft keywords and old identifiers won't break? I've seen quite a bit of FUD online, and I admit initially thinking my own code using Maybe: The match statement uses soft keywords. Only lines beginning with ``match``, containing a subject, a colon, and a line break will be identified as a match statement. Existing code using ``match`` as identifiers for variable names or functions will not break. Alternatively, copied straight from the PEP: The match and case keywords are *soft keywords*, i.e. they
are not reserved words in other grammatical contexts (including at the start of
a line if there is no colon where expected). This implies that they are
recognized as keywords when part of a match statement or case block only, and
are allowed to be used in all other contexts as variable or argument names. BTW, Daniel and I are tracking some of our own docs works here https://github.com/dmoisset/cpython/issues , though admittedly I haven't done much yet and I plan to sprint it over this weekend ;). |
Thanks for the reminder -- this indeed an important point. I believe this PR is likely dead, and it looks like @willingc is going to write us a better section. |
@gvanrossum I'm half way through the What's New and should post it tomorrow. |
Thanks @willingc just in time for 3.10a6! |
@gvanrossum Any objections to closing this PR? |
Sorry, forgot! |
Obviously this shouldn't be merged before the main pattern matching PR (GH-22917).
https://bugs.python.org/issue42128