擅长:python、mysql、java
<p>是的,<code>yield</code>语句暂停当前函数的执行,并将程序的控制权交给调用代码,其中生成的项将是正在迭代的生成器的下一个值。只有当从生成器请求进一步的值时,函数的内部调用才会恢复</p>
<p>如果您尝试较小的输入,并尝试使用<code>next()</code>手动迭代,您可能会更好地理解:</p>
<pre><code>>>> gen = flatten([[1, [2]], 3])
>>> print("output", next(gen))
yield2 1
yield1 1
output 1
>>> print("output", next(gen))
yield2 2
yield1 2
yield1 2
output 2
>>> print("output", next(gen))
yield2 3
output 3
>>> print("output", next(gen))
Traceback (most recent call last):
File "<ipython-input-16-1c675fe35f03>", line 1, in <module>
print("output", next(gen))
StopIteration
</code></pre>