擅长:python、mysql、java
<p><code>while next(i):</code>有两个问题</p>
<ol>
<li>与<code>for</code>循环不同,如果没有<code>next</code>值,<code>while</code>循环将不会捕获引发的<code>StopIteration</code>异常;在这种情况下,可以使用<code>next(i, None)</code>返回“false”值,但是每当迭代器返回实际的false值时,<code>while</code>循环也将停止</li>
<li><code>next</code>返回的值将被使用,并且不再在循环体中可用。(在python3.8+中,可以通过赋值表达式来解决这个问题,请参阅其他答案。)</li>
</ol>
<p>相反,您可以将<code>for</code>循环与<a href="https://docs.python.org/3/library/itertools.html#itertools.takewhile" rel="nofollow noreferrer">^{<cd10>}</a>一起使用,测试iterable中的当前元素,或者只测试任何其他条件。这将循环,直到iterable用尽,或者条件求值为false。在</p>
<pre><code>from itertools import takewhile
i = iter(range(10))
r = 0
for x in takewhile(lambda x: r < 10, i):
print("using", x)
r += x
print("result", r)
</code></pre>
<p>输出:</p>
^{pr2}$