首页 后端开发 Python教程 Return 如何影响 Python 3.3 中的生成器行为?

Return 如何影响 Python 3.3 中的生成器行为?

Oct 24, 2024 pm 05:16 PM

How does Return Affect Generator Behavior in Python 3.3?

Return 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 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

我如何使用美丽的汤来解析HTML? 我如何使用美丽的汤来解析HTML? Mar 10, 2025 pm 06:54 PM

我如何使用美丽的汤来解析HTML?

python中的图像过滤 python中的图像过滤 Mar 03, 2025 am 09:44 AM

python中的图像过滤

如何在Python中下载文件 如何在Python中下载文件 Mar 01, 2025 am 10:03 AM

如何在Python中下载文件

如何使用Python查找文本文件的ZIPF分布 如何使用Python查找文本文件的ZIPF分布 Mar 05, 2025 am 09:58 AM

如何使用Python查找文本文件的ZIPF分布

如何使用Python使用PDF文档 如何使用Python使用PDF文档 Mar 02, 2025 am 09:54 AM

如何使用Python使用PDF文档

如何在django应用程序中使用redis缓存 如何在django应用程序中使用redis缓存 Mar 02, 2025 am 10:10 AM

如何在django应用程序中使用redis缓存

如何使用TensorFlow或Pytorch进行深度学习? 如何使用TensorFlow或Pytorch进行深度学习? Mar 10, 2025 pm 06:52 PM

如何使用TensorFlow或Pytorch进行深度学习?

引入自然语言工具包(NLTK) 引入自然语言工具包(NLTK) Mar 01, 2025 am 10:05 AM

引入自然语言工具包(NLTK)

See all articles