mirror of
https://github.com/python/cpython
synced 2024-10-14 05:51:26 +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:
|
||||
|
||||
.. productionlist:: python-grammar
|
||||
for_stmt: "for" `target_list` "in" `expression_list` ":" `suite`
|
||||
for_stmt: "for" `target_list` "in" `starred_list` ":" `suite`
|
||||
: ["else" ":" `suite`]
|
||||
|
||||
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
|
||||
then executed once for each item provided by the iterator, in the order returned
|
||||
by the iterator. Each item in turn is assigned to the target list using the
|
||||
standard rules for assignments (see :ref:`assignment`), and then 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.
|
||||
iterator is created for the result of the ``starred_list``. The expression
|
||||
list can contain starred elements (``*x, *y``) that will be unpacked in the
|
||||
final iterator (as when constructing a ``tuple`` or ``list`` literal). The
|
||||
suite is then executed once for each item provided by the iterator, in the
|
||||
order returned by the iterator. Each item in turn is assigned to the target
|
||||
list using the standard rules for assignments (see :ref:`assignment`), and then
|
||||
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::
|
||||
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))``
|
||||
returns the list ``[0, 1, 2]``.
|
||||
|
||||
.. versionchanged:: 3.11
|
||||
Starred elements are now allowed in the expression list.
|
||||
|
||||
.. _try:
|
||||
.. _except:
|
||||
|
|
|
@ -160,6 +160,9 @@ traceback. (Contributed by Irit Katriel in :issue:`45607`.)
|
|||
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 functions. Outer comprehensions implicitly become
|
||||
asynchronous. (Contributed by Serhiy Storchaka in :issue:`33346`.)
|
||||
|
|
|
@ -1403,6 +1403,12 @@ def __getitem__(self, i):
|
|||
result.append(x)
|
||||
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):
|
||||
### try_stmt: 'try' ':' suite (except_clause ':' suite)+ ['else' ':' suite]
|
||||
### | 'try' ':' suite 'finally' ':' suite
|
||||
|
|
Loading…
Reference in a new issue