Python 生成器中的 Return 和 Yield
在 3.3 版本之前的 Python 中,在生成器函数定义中同时使用 return 和ield 语句会导致导致错误。然而,这种行为在 Python 3.3 中发生了变化。
考虑以下代码:
<code class="python">def f(): return 3 yield 2</code>
调用 x = f() 将创建一个生成器,并且 x.__next__() 将引发一个停止迭代异常。此行为与简单的 return 3 不同,后者会返回值 3。
这是因为在 Python 3.3 中,return ;现在,生成器内相当于 raise StopIteration()。因此,StopIteration 异常包含上面代码片段中的值 3。访问异常的 value 属性将检索该值。
此外,yield from 允许 делегировать 生成器到其他生成器。考虑以下示例:
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) for _ in g(): pass</code>
此代码打印 1。g 将执行委托给 f,并将 f 返回的值(即 1)分配给 x。然而,f 中的yield 2 语句并未执行,因为执行已委托给g。
以上是Python 生成器中的 Return 和 Yield 如何工作?的详细内容。更多信息请关注PHP中文网其他相关文章!