Python yield关键字深度解析:从生成器对象到返回值传递

南乔
南乔
发布时间:2026-10-14| 6人浏览过
原创

本文通过具体代码实例深入解析Python中yield关键字的工作机制。详细阐述生成器对象的创建过程、next()函数的调用逻辑以及yield在暂停执行与返回值传递中的作用。文章逐步拆解代码执行流程,解释res变量的赋值行为及None值的来源,帮助开发者理解生成器在状态保持与数据流控制中的核心应用。

Python yield代码示例与执行结果

以下是演示Python yield关键字用法的代码示例:


def demo():
  print("开始执行...")
  while 1:
    res = yield '这是返回值'
    print("res:",res)
d1 = demo()
print(d1)
print(next(d1))
print("*"*20)
print(next(d1))

运行上述代码后,得到的执行结果如下所示:

开始执行... 这是返回值 ******************** res: None 这是返回值

yield关键字执行流程深度解析

对代码执行逻辑进行逐行解析,以下是基于个人理解的详细说明,如有不准确之处,欢迎指正:

执行 d1 = demo() 时,仅创建了一个生成器对象,此时函数体内的代码并未真正执行,因此不会输出任何内容。

执行 print(d1) 时,输出的是生成器对象本身而非函数运行结果。这是因为程序在首次调用 next() 之前,遇到 yield 语句即挂起,即使 yield 前存在 print 语句,也不会在此阶段执行输出。

执行 print(next(d1)) 时,生成器从上一次暂停处继续执行。当再次遇到 yield 语句时,返回字符串“这是返回值”。结合前文输出,此时控制台显示“开始执行...”以及“这是返回值”。

再次执行 print(next(d1)) 时,生成器继续运行。由于上一步 yield 返回后,生成器处于等待接收值的状态,此时并未赋值给 res,因此 res 为 None。接着执行 while 循环,第四次遇到 yield 时,输出“这是返回值”。

以上即为关于Python yield关键字用法的完整解析,希望能为读者的学习提供有益参考,同时也欢迎大家继续支持本站获取更多技术内容。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。