@@ -284,7 +284,7 @@ A list display is a possibly empty series of expressions enclosed in square
284
284
brackets:
285
285
286
286
.. productionlist :: python-grammar
287
- list_display: "[" [`starred_list ` | `comprehension `] "]"
287
+ list_display: "[" [`flexible_expression_list ` | `comprehension `] "]"
288
288
289
289
A list display yields a new list object, the contents being specified by either
290
290
a list of expressions or a comprehension. When a comma-separated list of
@@ -309,7 +309,7 @@ A set display is denoted by curly braces and distinguishable from dictionary
309
309
displays by the lack of colons separating keys and values:
310
310
311
311
.. productionlist :: python-grammar
312
- set_display: "{" (`starred_list ` | `comprehension `) "}"
312
+ set_display: "{" (`flexible_expression_list ` | `comprehension `) "}"
313
313
314
314
A set display yields a new mutable set object, the contents being specified by
315
315
either a sequence of expressions or a comprehension. When a comma-separated
@@ -454,7 +454,7 @@ Yield expressions
454
454
.. productionlist :: python-grammar
455
455
yield_atom: "(" `yield_expression ` ")"
456
456
yield_from: "yield" "from" `expression `
457
- yield_expression: "yield" `expression_list ` | `yield_from `
457
+ yield_expression: "yield" `yield_list ` | `yield_from `
458
458
459
459
The yield expression is used when defining a :term: `generator ` function
460
460
or an :term: `asynchronous generator ` function and
@@ -485,9 +485,9 @@ When a generator function is called, it returns an iterator known as a
485
485
generator. That generator then controls the execution of the generator
486
486
function. The execution starts when one of the generator's methods is called.
487
487
At that time, the execution proceeds to the first yield expression, where it is
488
- suspended again, returning the value of :token: `~python-grammar:expression_list `
488
+ suspended again, returning the value of :token: `~python-grammar:yield_list `
489
489
to the generator's caller,
490
- or ``None `` if :token: `~python-grammar:expression_list ` is omitted.
490
+ or ``None `` if :token: `~python-grammar:yield_list ` is omitted.
491
491
By suspended, we mean that all local state is
492
492
retained, including the current bindings of local variables, the instruction
493
493
pointer, the internal evaluation stack, and the state of any exception handling.
@@ -576,7 +576,7 @@ is already executing raises a :exc:`ValueError` exception.
576
576
:meth: `~generator.__next__ ` method, the current yield expression always
577
577
evaluates to :const: `None `. The execution then continues to the next yield
578
578
expression, where the generator is suspended again, and the value of the
579
- :token: `~python-grammar:expression_list ` is returned to :meth: `__next__ `'s
579
+ :token: `~python-grammar:yield_list ` is returned to :meth: `__next__ `'s
580
580
caller. If the generator exits without yielding another value, a
581
581
:exc: `StopIteration ` exception is raised.
582
582
@@ -688,7 +688,7 @@ how a generator object would be used in a :keyword:`for` statement.
688
688
Calling one of the asynchronous generator's methods returns an :term: `awaitable `
689
689
object, and the execution starts when this object is awaited on. At that time,
690
690
the execution proceeds to the first yield expression, where it is suspended
691
- again, returning the value of :token: `~python-grammar:expression_list ` to the
691
+ again, returning the value of :token: `~python-grammar:yield_list ` to the
692
692
awaiting coroutine. As with a generator, suspension means that all local state
693
693
is retained, including the current bindings of local variables, the instruction
694
694
pointer, the internal evaluation stack, and the state of any exception handling.
@@ -752,7 +752,7 @@ which are used to control the execution of a generator function.
752
752
asynchronous generator function is resumed with an :meth: `~agen.__anext__ `
753
753
method, the current yield expression always evaluates to :const: `None ` in the
754
754
returned awaitable, which when run will continue to the next yield
755
- expression. The value of the :token: `~python-grammar:expression_list ` of the
755
+ expression. The value of the :token: `~python-grammar:yield_list ` of the
756
756
yield expression is the value of the :exc: `StopIteration ` exception raised by
757
757
the completing coroutine. If the asynchronous generator exits without
758
758
yielding another value, the awaitable instead raises a
@@ -885,7 +885,7 @@ will generally select an element from the container. The subscription of a
885
885
:ref: `GenericAlias <types-genericalias >` object.
886
886
887
887
.. productionlist :: python-grammar
888
- subscription: `primary ` "[" `expression_list ` "]"
888
+ subscription: `primary ` "[" `flexible_expression_list ` "]"
889
889
890
890
When an object is subscripted, the interpreter will evaluate the primary and
891
891
the expression list.
@@ -897,9 +897,13 @@ primary is subscripted, the evaluated result of the expression list will be
897
897
passed to one of these methods. For more details on when ``__class_getitem__ ``
898
898
is called instead of ``__getitem__ ``, see :ref: `classgetitem-versus-getitem `.
899
899
900
- If the expression list contains at least one comma, it will evaluate to a
901
- :class: `tuple ` containing the items of the expression list. Otherwise, the
902
- expression list will evaluate to the value of the list's sole member.
900
+ If the expression list contains at least one comma, or if any of the expressions
901
+ are starred, the expression list will evaluate to a :class: `tuple ` containing
902
+ the items of the expression list. Otherwise, the expression list will evaluate
903
+ to the value of the list's sole member.
904
+
905
+ .. versionchanged :: 3.11
906
+ Expressions in an expression list may be starred. See :pep: `646 `.
903
907
904
908
For built-in objects, there are two types of objects that support subscription
905
909
via :meth: `~object.__getitem__ `:
@@ -1898,10 +1902,12 @@ Expression lists
1898
1902
single: , (comma); expression list
1899
1903
1900
1904
.. productionlist :: python-grammar
1905
+ starred_expression: ["*"] `or_expr `
1906
+ flexible_expression: `assignment_expression ` | `starred_expression `
1907
+ flexible_expression_list: `flexible_expression ` ("," `flexible_expression `)* [","]
1908
+ starred_expression_list: `starred_expression ` ("," `starred_expression `)* [","]
1901
1909
expression_list: `expression ` ("," `expression `)* [","]
1902
- starred_list: `starred_item ` ("," `starred_item `)* [","]
1903
- starred_expression: `expression ` | (`starred_item ` ",")* [`starred_item `]
1904
- starred_item: `assignment_expression ` | "*" `or_expr `
1910
+ yield_list: `expression_list ` | `starred_expression ` "," [`starred_expression_list `]
1905
1911
1906
1912
.. index :: pair: object; tuple
1907
1913
@@ -1922,6 +1928,9 @@ the unpacking.
1922
1928
.. versionadded :: 3.5
1923
1929
Iterable unpacking in expression lists, originally proposed by :pep: `448 `.
1924
1930
1931
+ .. versionadded :: 3.11
1932
+ Any item in an expression list may be starred. See :pep: `646 `.
1933
+
1925
1934
.. index :: pair: trailing; comma
1926
1935
1927
1936
A trailing comma is required only to create a one-item tuple,
0 commit comments