PEP 634: change walrus pattern to AS pattern (#1661)
Co-authored-by: Brandt Bucher <brandtbucher@gmail.com>
This commit is contained in:
parent
a4502e04d6
commit
dad6766f2b
52
pep-0634.rst
52
pep-0634.rst
|
@ -158,7 +158,7 @@ Irrefutable case blocks
|
|||
|
||||
A pattern is considered irrefutable if we can prove from its syntax
|
||||
alone that it will always succeed. In particular, capture patterns
|
||||
and wildcard patterns are irrefutable, as are walrus patterns whose
|
||||
and wildcard patterns are irrefutable, and so are AS patterns whose
|
||||
right-hand side is irrefutable, OR patterns containing at least
|
||||
one irrefutable pattern, and parenthesized irrefutable patterns.
|
||||
|
||||
|
@ -177,8 +177,8 @@ Patterns
|
|||
The top-level syntax for patterns is as follows::
|
||||
|
||||
patterns: open_sequence_pattern | pattern
|
||||
pattern: walrus_pattern | or_pattern
|
||||
walrus_pattern: capture_pattern ':=' or_pattern
|
||||
pattern: as_pattern | or_pattern
|
||||
as_pattern: or_pattern 'as' capture_pattern
|
||||
or_pattern: '|'.closed_pattern+
|
||||
closed_pattern:
|
||||
| literal_pattern
|
||||
|
@ -191,34 +191,19 @@ The top-level syntax for patterns is as follows::
|
|||
| class_pattern
|
||||
|
||||
|
||||
Walrus Patterns
|
||||
^^^^^^^^^^^^^^^
|
||||
AS Patterns
|
||||
^^^^^^^^^^^
|
||||
|
||||
Syntax::
|
||||
|
||||
walrus_pattern: capture_pattern ':=' or_pattern
|
||||
as_pattern: or_pattern 'as' capture_pattern
|
||||
|
||||
(Note: the name on the left may not be ``_``.)
|
||||
(Note: the name on the right may not be ``_``.)
|
||||
|
||||
A walrus pattern matches the OR pattern on the right of the ``:=``
|
||||
operator against the subject. If this fails, the walrus pattern fails.
|
||||
Otherwise, the walrus pattern binds the subject to the name on the left
|
||||
of the ``:=`` operator and succeeds.
|
||||
|
||||
Open Issue
|
||||
~~~~~~~~~~
|
||||
|
||||
An alternate syntax for this construct has been put forward, whose
|
||||
syntax would be::
|
||||
|
||||
walrus_pattern: or_pattern 'as' capture_pattern
|
||||
|
||||
The semantics would be the same: it matches the OR pattern against the
|
||||
subject and on success binds the subject to the name in the capture
|
||||
pattern.
|
||||
|
||||
We leave it to the Steering Council to decide which form to prefer (we
|
||||
would rename "walrus pattern" to "AS pattern").
|
||||
An AS pattern matches the OR pattern on the left of the ``as``
|
||||
keyword against the subject. If this fails, the AS pattern fails.
|
||||
Otherwise, the AS pattern binds the subject to the name on the right
|
||||
of the ``as`` keyword and succeeds.
|
||||
|
||||
|
||||
OR Patterns
|
||||
|
@ -415,7 +400,7 @@ Syntax::
|
|||
mapping_pattern: '{' [items_pattern] '}'
|
||||
items_pattern: ','.key_value_pattern+ ','?
|
||||
key_value_pattern:
|
||||
| (literal_pattern | value_pattern) ':' or_pattern
|
||||
| (literal_pattern | value_pattern) ':' pattern
|
||||
| double_star_pattern
|
||||
double_star_pattern: '**' capture_pattern
|
||||
|
||||
|
@ -463,10 +448,7 @@ Syntax::
|
|||
| keyword_patterns
|
||||
positional_patterns: ','.pattern+
|
||||
keyword_patterns: ','.keyword_pattern+
|
||||
keyword_pattern: NAME '=' or_pattern
|
||||
|
||||
(Note that positional patterns may be unparenthesized walrus patterns,
|
||||
but keyword patterns may not.)
|
||||
keyword_pattern: NAME '=' pattern
|
||||
|
||||
A class pattern may not repeat the same keyword multiple times.
|
||||
|
||||
|
@ -596,8 +578,8 @@ Other notation used beyond standard EBNF:
|
|||
guard: 'if' named_expression
|
||||
|
||||
patterns: open_sequence_pattern | pattern
|
||||
pattern: walrus_pattern | or_pattern
|
||||
walrus_pattern: capture_pattern ':=' or_pattern
|
||||
pattern: as_pattern | or_pattern
|
||||
as_pattern: or_pattern 'as' capture_pattern
|
||||
or_pattern: '|'.closed_pattern+
|
||||
closed_pattern:
|
||||
| literal_pattern
|
||||
|
@ -640,7 +622,7 @@ Other notation used beyond standard EBNF:
|
|||
mapping_pattern: '{' [items_pattern] '}'
|
||||
items_pattern: ','.key_value_pattern+ ','?
|
||||
key_value_pattern:
|
||||
| (literal_pattern | value_pattern) ':' or_pattern
|
||||
| (literal_pattern | value_pattern) ':' pattern
|
||||
| double_star_pattern
|
||||
double_star_pattern: '**' capture_pattern
|
||||
|
||||
|
@ -651,7 +633,7 @@ Other notation used beyond standard EBNF:
|
|||
| keyword_patterns
|
||||
positional_patterns: ','.pattern+
|
||||
keyword_patterns: ','.keyword_pattern+
|
||||
keyword_pattern: NAME '=' or_pattern
|
||||
keyword_pattern: NAME '=' pattern
|
||||
|
||||
|
||||
Copyright
|
||||
|
|
Loading…
Reference in New Issue