擅长:python、mysql、java
<pre><code>>>> def f():
... yield 1
... return 2
...
>>> g = f()
>>> next(g)
1
>>> next(g)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration: 2
</code></pre>
<p>{{{cda}的执行在cda}结束。显然,在<code>return</code>中给定一个值只会将其作为<code>StopIteration</code>异常的参数传递。在</p>
<p>注释中的<a href="/questions/27089289/is-it-possible-that-a-python-def-contains-both-yield-and-return/27089375#comment-42685903">pointed out</a>是在python3.3之后才允许传递这样的值。在</p>
<p>在正常迭代(即<code>for x in f()</code>)中看不到这个值。在</p>
<p>Tornado似乎对它做了一些特别的事情,通过使用<code>next</code>进行迭代并捕捉异常。协同程序是一个复杂的话题。这可能是协同程序的“结果”,其中的<code>yield</code>只是暂停执行和交换数据。在</p>