news 2026/6/10 11:02:58

深入理解 Python 中的 yield 关键字

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
深入理解 Python 中的 yield 关键字

在 Python 编程中,yield是一个关键而强大的语言特性,它使得函数能够以“惰性求值”和“状态保持”的方式逐步返回多个值。与普通函数通过return一次性返回结果不同,包含yield的函数被称为生成器函数,其调用结果是一个生成器对象。本文将系统地介绍yield的工作原理、使用方法、优势以及典型应用场景。

什么是生成器函数?

只要一个函数体中包含至少一个yield表达式,该函数就成为生成器函数。调用生成器函数不会立即执行函数体,而是返回一个生成器对象:

defsimple_gen():yield1yield2yield3gen=simple_gen()# 此时函数并未执行

只有在对该生成器对象进行迭代(例如调用next(gen)或放入for循环)时,函数才会开始执行,并在遇到yield时暂停,返回yield后的值,同时保存当前的执行状态(包括局部变量、指令指针等)。下一次迭代时,函数从上次暂停的位置继续执行。

print(next(gen))# 输出: 1print(next(gen))# 输出: 2print(next(gen))# 输出: 3# 再次调用 next(gen) 将抛出 StopIteration 异常

值得注意的是,生成器函数不一定需要包含循环。虽然许多实际应用中会使用循环来多次触发yield,但即使没有循环,只要存在yield,函数就是生成器。

yield 与 return 的本质区别

  • return:函数执行到return后立即终止,释放所有局部状态,只能返回一次。
  • yield:函数在yield处暂停,保留所有状态,下次调用时从中断处继续,可多次产出值。

这种“暂停-恢复”机制使生成器天然具备状态机的特性,非常适合处理需要分步计算或流式输出的场景。

内存效率:为何选择生成器?

生成器的核心优势在于按需生成数据,避免一次性将大量数据加载到内存中。

对比以下两种方式生成一百万个整数:

# 列表推导式:立即创建完整列表,占用大量内存numbers=[iforiin
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/29 10:13:49

Linux内核驱动——设备树原理与应用

目录 一、设备树介绍 1.1 设备树基础概念 1.2 设备树相关文件 1.3 编译命令 二、设备树节点结构分析 三、引脚控制配置 四、Linux 内核驱动设计 4.1 驱动框架选择 4.1.1 传统字符设备驱动 4.1.2 基于 Platform 的标准驱动 4.2 GPIO 子系统的使用 五、驱动与设备树的…

作者头像 李华
网站建设 2026/6/9 1:58:43

闭眼入!10个AI论文网站测评,专科生毕业论文写作必备工具推荐

面对日益繁重的学术任务,专科生在撰写毕业论文时常常面临选题困难、资料查找效率低、格式规范不熟悉等问题。为了帮助广大专科生高效完成论文写作,笔者基于2026年的实测数据与用户真实反馈,对市面上主流的AI论文工具进行了系统测评。本次测评…

作者头像 李华
网站建设 2026/6/5 0:41:34

Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示

Flutter for OpenHarmony 可视化教学:A* 寻路算法的交互式演示 在人工智能、游戏开发和机器人导航等领域,路径规划(Pathfinding) 是一项基础而关键的技术。其中,A*(A-Star)算法因其高效性与最优…

作者头像 李华
网站建设 2026/5/30 16:59:28

AI赋能论文写作:11款跨学科工具推荐

近年来,人工智能语言模型的飞速发展彻底改变了学术研究的格局。尤其是自 2022 年 11 月 OpenAI 发布 ChatGPT 以来,AI 工具在学术界的应用日益广泛,帮助科研人员节省时间、提高效率,从而专注于更有价值的任务。AI 学术工具本质上是…

作者头像 李华
网站建设 2026/6/3 15:25:01

php python+vue员工签到管理系统毕设开题报告

目录系统概述技术选型功能模块创新点应用场景开发计划项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作系统概述 员工签到管理系统基于PHP、Python和Vue.js技术栈开发,实现员工考勤、签到记录、…

作者头像 李华
网站建设 2026/5/16 13:11:14

php python+vue大学校排课管理信息系统设计开题报告

目录 校排课管理信息系统设计背景系统技术栈选择系统核心功能模块系统创新点预期成果技术实现示例(关键代码片段) 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 校排课管理信息系…

作者头像 李华