mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 02:59:33 +07:00
Migrate to DocumentationMarkup elements GitOrigin-RevId: ea4d71638b1dd3a160521e655fd2a1670ea27701
56 lines
6.2 KiB
HTML
56 lines
6.2 KiB
HTML
<html><body><div class="content"><div class="section" id="the-for-statement">
|
|
<span id="for"></span><h2>The <a class="reference internal" href="#for"><tt class="xref std std-keyword docutils literal"><span class="pre">for</span></tt></a> statement</h2>
|
|
<p id="index-6">The <a class="reference internal" href="#for"><tt class="xref std std-keyword docutils literal"><span class="pre">for</span></tt></a> statement is used to iterate over the elements of a sequence
|
|
(such as a string, tuple or list) or other iterable object:</p>
|
|
<pre>
|
|
<strong id="grammar-token-for_stmt">for_stmt</strong> ::= "for" <a class="reference internal" href="simple_stmts.html#grammar-token-target_list"><tt class="xref docutils literal"><span class="pre">target_list</span></tt></a> "in" <a class="reference internal" href="expressions.html#grammar-token-expression_list"><tt class="xref docutils literal"><span class="pre">expression_list</span></tt></a> ":" <a class="reference internal" href="#grammar-token-suite"><tt class="xref docutils literal"><span class="pre">suite</span></tt></a>
|
|
["else" ":" <a class="reference internal" href="#grammar-token-suite"><tt class="xref docutils literal"><span class="pre">suite</span></tt></a>]
|
|
</pre>
|
|
<p>The expression list is evaluated once; it should yield an iterable object. An
|
|
iterator is created for the result of the <tt class="docutils literal"><span class="pre">expression_list</span></tt>. 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 <a class="reference internal" href="simple_stmts.html#assignment"><em>Assignment statements</em></a>), and then the suite is
|
|
executed. When the items are exhausted (which is immediately when the sequence
|
|
is empty or an iterator raises a <a class="reference internal" href="../library/exceptions.html#StopIteration" title="StopIteration"><tt class="xref py py-exc docutils literal"><span class="pre">StopIteration</span></tt></a> exception), the suite in
|
|
the <a class="reference internal" href="#else"><tt class="xref std std-keyword docutils literal"><span class="pre">else</span></tt></a> clause, if present, is executed, and the loop terminates.</p>
|
|
<p id="index-7">A <a class="reference internal" href="simple_stmts.html#break"><tt class="xref std std-keyword docutils literal"><span class="pre">break</span></tt></a> statement executed in the first suite terminates the loop
|
|
without executing the <a class="reference internal" href="#else"><tt class="xref std std-keyword docutils literal"><span class="pre">else</span></tt></a> clause’s suite. A <a class="reference internal" href="simple_stmts.html#continue"><tt class="xref std std-keyword docutils literal"><span class="pre">continue</span></tt></a>
|
|
statement executed in the first suite skips the rest of the suite and continues
|
|
with the next item, or with the <a class="reference internal" href="#else"><tt class="xref std std-keyword docutils literal"><span class="pre">else</span></tt></a> clause if there is no next
|
|
item.</p>
|
|
<p>The for-loop makes assignments to the variables(s) in the target list.
|
|
This overwrites all previous assignments to those variables including
|
|
those made in the suite of the for-loop:</p>
|
|
<div class="highlight-python3"><div class="highlight"><pre><span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="n">i</span><span class="p">)</span>
|
|
<span class="n">i</span> <span class="o">=</span> <span class="mi">5</span> <span class="c"># this will not affect the for-loop</span>
|
|
<span class="c"># because i will be overwritten with the next</span>
|
|
<span class="c"># index in the range</span>
|
|
</pre></div>
|
|
</div>
|
|
<p id="index-8">Names in the target list are not deleted when the loop is finished, but if the
|
|
sequence is empty, they will not have been assigned to at all by the loop. Hint:
|
|
the built-in function <a class="reference internal" href="../library/stdtypes.html#range" title="range"><tt class="xref py py-func docutils literal"><span class="pre">range()</span></tt></a> returns an iterator of integers suitable to
|
|
emulate the effect of Pascal’s <tt class="docutils literal"><span class="pre">for</span> <span class="pre">i</span> <span class="pre">:=</span> <span class="pre">a</span> <span class="pre">to</span> <span class="pre">b</span> <span class="pre">do</span></tt>; e.g., <tt class="docutils literal"><span class="pre">list(range(3))</span></tt>
|
|
returns the list <tt class="docutils literal"><span class="pre">[0,</span> <span class="pre">1,</span> <span class="pre">2]</span></tt>.</p>
|
|
<div class="admonition note">
|
|
<p class="first admonition-title">Note</p>
|
|
<p id="index-9">There is a subtlety when the sequence is being modified by the loop (this can
|
|
only occur for mutable sequences, i.e. lists). An internal counter is used
|
|
to keep track of which item is used next, and this is incremented on each
|
|
iteration. When this counter has reached the length of the sequence the loop
|
|
terminates. This means that if the suite deletes the current (or a previous)
|
|
item from the sequence, the next item will be skipped (since it gets the
|
|
index of the current item which has already been treated). Likewise, if the
|
|
suite inserts an item in the sequence before the current item, the current
|
|
item will be treated again the next time through the loop. This can lead to
|
|
nasty bugs that can be avoided by making a temporary copy using a slice of
|
|
the whole sequence, e.g.,</p>
|
|
<div class="last highlight-python3"><div class="highlight"><pre><span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">a</span><span class="p">[:]:</span>
|
|
<span class="k">if</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> <span class="n">a</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">x</span><span class="p">)</span>
|
|
</pre></div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div></body></html> |