mirror of
https://github.com/python/cpython
synced 2024-09-05 08:17:45 +00:00
bpo-46725: Document starred expressions in for statements (GH-31481)
Automerge-Triggered-By: GH:pablogsal
This commit is contained in:
parent
09487c11a5
commit
7fb94fd7a8
|
@ -154,17 +154,20 @@ The :keyword:`for` statement is used to iterate over the elements of a sequence
|
||||||
(such as a string, tuple or list) or other iterable object:
|
(such as a string, tuple or list) or other iterable object:
|
||||||
|
|
||||||
.. productionlist:: python-grammar
|
.. productionlist:: python-grammar
|
||||||
for_stmt: "for" `target_list` "in" `expression_list` ":" `suite`
|
for_stmt: "for" `target_list` "in" `starred_list` ":" `suite`
|
||||||
: ["else" ":" `suite`]
|
: ["else" ":" `suite`]
|
||||||
|
|
||||||
The expression list is evaluated once; it should yield an iterable object. An
|
The expression list is evaluated once; it should yield an iterable object. An
|
||||||
iterator is created for the result of the ``expression_list``. The suite is
|
iterator is created for the result of the ``starred_list``. The expression
|
||||||
then executed once for each item provided by the iterator, in the order returned
|
list can contain starred elements (``*x, *y``) that will be unpacked in the
|
||||||
by the iterator. Each item in turn is assigned to the target list using the
|
final iterator (as when constructing a ``tuple`` or ``list`` literal). The
|
||||||
standard rules for assignments (see :ref:`assignment`), and then the suite is
|
suite is then executed once for each item provided by the iterator, in the
|
||||||
executed. When the items are exhausted (which is immediately when the sequence
|
order returned by the iterator. Each item in turn is assigned to the target
|
||||||
is empty or an iterator raises a :exc:`StopIteration` exception), the suite in
|
list using the standard rules for assignments (see :ref:`assignment`), and then
|
||||||
the :keyword:`!else` clause, if present, is executed, and the loop terminates.
|
the suite is executed. When the items are exhausted (which is immediately when
|
||||||
|
the sequence is empty or an iterator raises a :exc:`StopIteration` exception),
|
||||||
|
the suite in the :keyword:`!else` clause, if present, is executed, and the loop
|
||||||
|
terminates.
|
||||||
|
|
||||||
.. index::
|
.. index::
|
||||||
statement: break
|
statement: break
|
||||||
|
@ -196,6 +199,8 @@ the built-in function :func:`range` returns an iterator of integers suitable to
|
||||||
emulate the effect of Pascal's ``for i := a to b do``; e.g., ``list(range(3))``
|
emulate the effect of Pascal's ``for i := a to b do``; e.g., ``list(range(3))``
|
||||||
returns the list ``[0, 1, 2]``.
|
returns the list ``[0, 1, 2]``.
|
||||||
|
|
||||||
|
.. versionchanged:: 3.11
|
||||||
|
Starred elements are now allowed in the expression list.
|
||||||
|
|
||||||
.. _try:
|
.. _try:
|
||||||
.. _except:
|
.. _except:
|
||||||
|
|
|
@ -160,6 +160,9 @@ traceback. (Contributed by Irit Katriel in :issue:`45607`.)
|
||||||
Other Language Changes
|
Other Language Changes
|
||||||
======================
|
======================
|
||||||
|
|
||||||
|
* Starred expressions can be used in :ref:`for statements<for>`. (See
|
||||||
|
:issue:`46725` for more details.)
|
||||||
|
|
||||||
* Asynchronous comprehensions are now allowed inside comprehensions in
|
* Asynchronous comprehensions are now allowed inside comprehensions in
|
||||||
asynchronous functions. Outer comprehensions implicitly become
|
asynchronous functions. Outer comprehensions implicitly become
|
||||||
asynchronous. (Contributed by Serhiy Storchaka in :issue:`33346`.)
|
asynchronous. (Contributed by Serhiy Storchaka in :issue:`33346`.)
|
||||||
|
|
|
@ -1403,6 +1403,12 @@ def __getitem__(self, i):
|
||||||
result.append(x)
|
result.append(x)
|
||||||
self.assertEqual(result, [1, 2, 3])
|
self.assertEqual(result, [1, 2, 3])
|
||||||
|
|
||||||
|
result = []
|
||||||
|
a = b = c = [1, 2, 3]
|
||||||
|
for x in *a, *b, *c:
|
||||||
|
result.append(x)
|
||||||
|
self.assertEqual(result, 3 * a)
|
||||||
|
|
||||||
def test_try(self):
|
def test_try(self):
|
||||||
### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
|
### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
|
||||||
### | 'try' ':' suite 'finally' ':' suite
|
### | 'try' ':' suite 'finally' ':' suite
|
||||||
|
|
Loading…
Reference in a new issue