news 2026/6/21 22:54:53

深入理解 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/6/19 14:32:17

php python+vue自助考务考试系统_开题报告

目录 系统概述技术架构功能模块创新点实现难点预期成果 项目技术支持可定制开发之功能亮点源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作 系统概述 自助考务考试系统是一个基于PHP、Python和Vue.js技术栈的综合性在线考试平台&#xff0c…

作者头像 李华
网站建设 2026/6/15 8:12:36

# 云南茶叶数据分析系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

云南茶叶数据分析系统(设计源文件万字报告讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码项目亮点基于大数据技术栈构建的完整茶叶行业分析平台实现从数据采集到可视化的全链路处理多维度分析:销售趋势、茶叶类型、产地、价格等前后端…

作者头像 李华
网站建设 2026/6/21 4:53:08

论文写作新选择:11个AI辅助网站全解析

AI语言模型的快速发展显著改变了学术研究方式,尤其是2022年ChatGPT发布后,AI工具在学术写作、数据分析、模式识别等领域的应用大幅提升效率。这些智能工具能辅助论文写作、编辑和研究全流程,帮助研究者节省时间。针对毕业论文需求&#xff0c…

作者头像 李华
网站建设 2026/6/19 16:52:11

AI元人文:跨文化共生与文明新契约

AI元人文:跨文化共生与文明新契约 ——智能时代多元文明的协同操作系统 笔者:岐金兰(独立非专业人机协作研究者) 摘要 本文深入探讨AI元人文理论在跨文化语境下的系统性建构,旨在为智能时代的全球文明共生提供全新的哲…

作者头像 李华
网站建设 2026/6/11 21:54:06

看完就会:降AI率工具,千笔AI VS 知文AI,MBA专属更高效!

在AI技术迅猛发展的今天,越来越多的MBA学生和研究人员开始借助AI工具提升论文写作效率。然而,随着学术审查标准日益严格,AI生成内容的痕迹和重复率问题愈发突出,成为论文通过审核的“隐形杀手”。面对市场上种类繁多的降AI率和降重…

作者头像 李华
网站建设 2026/6/14 1:10:21

【课程设计/毕业设计】基于springboot+小程序的温州博物馆小程序的设计与实现基于微信小程序的博物馆文创系统的设计与实现【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

作者头像 李华