Python 中的生成器 Yield 和 Return 相互作用
在 Python 3.3 之前,在函数定义中组合 return 和 Yield 会导致错误。但是,在 Python 3.3 及更高版本中,此行为已更新。
Python 3.3 行为
在 Python 3.3 中,生成器函数中的 return 语句现在以类似方式处理到 raise StopIteration() 语句。因此,在生成器中同时使用 return 和 yield 现在相当于引发具有指定值的 StopIteration 异常。
示例:
考虑以下代码:
<code class="python">def f(): return 3 yield 2</code>
当调用 f() 函数时,它将不再引发运行时错误。相反,生成器对象 (x) 的 __next__() 函数将引发 StopIteration 异常,其值为 3:
<code class="python">x = f() try: print(x.__next__()) except StopIteration as e: print(e.value) # Prints "3"</code>
产生返回值
If使用yield from语法委托生成器函数,return语句的返回值将是委托生成器的结果。
示例:
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) # Iterate through the generator: for _ in g(): pass # Prints "1"</code>
在此示例中,f() 生成器使用yield from 委托给g() 生成器。结果,f() 生成器中 return 1 返回的值就变成了 g() 生成器的结果。
以上是Python 中的生成器产量和回报如何交互?的详细内容。更多信息请关注PHP中文网其他相关文章!