<p><a href="https://docs.python.org/3/reference/simple_stmts.html#return" rel="nofollow noreferrer">^{<cd1>}</a>停止函数的控制流并返回流。您可以在这里使用<a href="https://docs.python.org/3/reference/simple_stmts.html#yield" rel="nofollow noreferrer">^{<cd2>}</a>,它将把您的函数转换成<a href="https://docs.python.org/3/glossary.html#term-generator" rel="nofollow noreferrer"><em>generator</em></a>。例如:</p>
<pre><code>def posnegzero(nulist):
for x in nulist:
if x > 0:
yield "positive"
elif x < 0:
yield "negative"
else:
yield "zero"
</code></pre>
<p>每次对返回的对象调用<a href="https://docs.python.org/3/library/functions.html#next" rel="nofollow noreferrer">^{<cd3>}</a>时,它将生成下一个结果:</p>
^{pr2}$
<p>或者您可以同时获得所有结果:</p>
<pre><code>>>> result = posnegzero([-20, 1, 2, -3, -5, 0, 100, -123])
>>> list(result)
['negative', 'positive', 'positive', 'negative', 'negative', 'zero', 'positive', 'negative']
</code></pre>
<p>您也可以使用<code>for</code>循环来迭代它。<code>for</code>循环反复调用<a href="https://docs.python.org/3/library/functions.html#next" rel="nofollow noreferrer">^{<cd3>}</a>方法,直到收到<a href="https://docs.python.org/3/library/exceptions.html#StopIteration" rel="nofollow noreferrer">^{<cd7>}</a>异常。例如:</p>
<pre><code>for result in posnegzero([-20, 1, 2, -3, -5, 0, 100, -123]):
print(result)
# which will print
negative
positive
positive
negative
negative
zero
positive
negative
</code></pre>
<p>有关<code>yield</code>的详细信息,请参阅:<a href="https://stackoverflow.com/q/231767/2063361"><em>What does the “yield” keyword do?</em></a></p>