在生成器中返回:Python 3.3 创新
在以前的 Python 版本中,在同一函数定义中同时使用 return 和ield 会导致在错误中。然而,Python 3.3 引入了重大更改。
请考虑以下代码:
<code class="python">def f(): return 3 yield 2</code>
在此代码中,return 语句出现在yield 语句之前。根据新的行为,“生成器中的 return
当在生成器对象上调用函数 next 时,它会引发一个值为 3 的 StopIteration 异常3,相当于返回3。但是,由于生成器已终止,因此无法直接检索该值。相反,该值可以作为异常对象的 value 属性来访问。
<code class="python">x = f() try: x.__next__() except StopIteration as e: print(e.value) # Outputs 3</code>
此外,如果生成器与yield from 语法一起使用,则它充当返回值。
<code class="python">def g(): x = yield from f() print(x) for _ in g(): pass</code>
在本例中,输出为 1(f 的返回值),但由于生成器已终止,因此不会打印 2。
以上是Python 3.3 中返回内部生成器可以替代引发 StopIteration 异常吗?的详细内容。更多信息请关注PHP中文网其他相关文章!