bpo-42128: Add what's new section for PEP 634 (pattern matching)#24588
bpo-42128: Add what's new section for PEP 634 (pattern matching)#24588gvanrossum wants to merge 1 commit intopython:masterfrom
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.
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