Return 如何影响 Python 3.3 中的生成器行为?
Oct 24, 2024 pm 05:16 PMReturn Inside Generator with Yield
在 Python 3.3 中,针对生成器函数中 return 和 Yield 的使用引入了重大更改。与 Python 2 不同,此类代码会触发错误,而 Python 3.3 允许这样做。但是,该行为与人们预期的不同。
考虑以下 Python 3.3 代码:
<code class="python">def f(): return 3 yield 2 x = f() print(x.__next__())</code>
登录后复制
如果运行此代码,您会注意到抛出了一个异常:StopIteration: 3. 此异常有两个关键方面:
-
引发 StopIteration: 生成器函数内的 return 语句现在相当于 raise StopIteration(
)。 - 可通过异常访问的值:返回的值(在本例中为 3)可通过异常对象的 value 属性访问。
因此,当生成器函数同时包含 return 和yield,这就像引发具有指定返回值的 StopIteration 异常。这意味着生成器将终止,并且返回值将通过异常的 value 属性获得。
换句话说,虽然生成器函数中的 return 以前是一个错误,但现在它有一个特定的目的:终止生成器并通过异常处理机制返回一个值。
此行为对使用 Python 3.3 中新的 Yield from 语法的生成器委托有影响。例如:
<code class="python">def f(): return 1 yield 2 def g(): x = yield from f() print(x) # Iterate over generator to run it for _ in g(): pass</code>
登录后复制
在此代码中,生成器 f 返回 1,然后委托给生成器 g,后者打印返回值。但是,您只会看到打印的 1,这表明在 f 中的yield 语句产生值 2 之前,yield 语句停止了委托。
以上是Return 如何影响 Python 3.3 中的生成器行为?的详细内容。更多信息请关注PHP中文网其他相关文章!
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章
击败分裂小说需要多长时间?
3 周前
By DDD
仓库:如何复兴队友
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前
By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前
By 尊渡假赌尊渡假赌尊渡假赌
公众号网页更新缓存难题:如何避免版本更新后旧缓存影响用户体验?
3 周前
By 王林

热门文章标签

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)