0

0

Python 3生成器构造与使用

心靈之曲

心靈之曲

发布时间:2026-02-06 08:12:25

|

174人浏览过

|

来源于php中文网

原创

本文深入解析 python 3 中生成器的构建方式与实际运用,全面阐述 yield 关键字的核心机制,并系统介绍生成器对象所支持的内置方法——send()close()throw(),助力开发者掌握其在真实项目中的灵活操控与高效实践。

1、 创建生成器最常见的方式是定义含 yield 的函数,但更简洁的途径是采用生成器推导式,比如通过 gen1 这类表达式即可快速构建。

2、 尽管其语法形式与列表推导式高度相似,但二者在运行行为上存在本质差异,下文将结合执行结果展开对比说明。

Python 3生成器构造与使用

3、 执行对应代码后,输出结果如下所示:

立即学习Python免费学习笔记(深入)”;

4、 列表推导式会在创建时立即完成全部元素的计算并存入内存。

5、 相比之下,生成器采用惰性求值策略:仅当被迭代(如进入 for 循环)时,才按需逐个生成并返回值。

Python 3生成器构造与使用

6、 对于逻辑较复杂的场景,通常需要编写类函数结构的生成器,如图中所示。

7、 yield 的作用是暂停当前生成器的执行流程,并向外返回一个值;下次调用时从中断处继续运行;而 return 则会彻底终止生成器,引发 StopIteration 异常。yield 返回的值可通过迭代获取,return 后的内容则不可见。

8、 多数生成器会在生命周期内多次触发 yield,实现连续产出。

9、 图中分别调用 gen_prime(50)gen_prime(100),生成两个独立的生成器实例,随后由 for 循环依次提取其中的质数值,直至所有数据耗尽。

Python 3生成器构造与使用

10、 调用生成器函数后,并不会立即执行函数体,而是返回一个生成器对象,该对象具备按需产生数据的能力。

11、 除使用 for 循环遍历外,也可借助 next() 函数手动获取下一个 yield 值,如图所示。

12、 某些生成器设计为无限产出,例如质数生成器,理论上可源源不断地输出符合条件的新数值。

永利在线企业网站管理系统(CMS)1.0 Build 20100612
永利在线企业网站管理系统(CMS)1.0 Build 20100612

修正说明:1,实现真正的软件开源。2,安装界面的美化3,真正实现栏目的递归无限极分类。4,后台添加幻灯片图片的管理,包括添加,修改,删除等。5,修正添加新闻的报错信息6,修正网站参数的logo上传问题7,修正产品图片的栏目无限极分类8,修正投票系统的只能单选问题9,添加生成静态页功能10,添加缓存功能特点和优势1. 基于B/S架构,通过本地电脑、局域网、互联网皆可使用,使得企业的管理与业务不受地域

下载

Python 3生成器构造与使用

Python 3生成器构造与使用

13、 若使用的是无限生成器,则需在适当时机主动调用 close() 方法来显式终止其运行,防止资源持续占用。

14、 一旦调用 close(),该生成器即进入关闭状态,后续再调用 next() 将直接抛出 StopIteration;for 循环也会随之自然退出。

Python 3生成器构造与使用

15、 当需让生成器在运行中主动抛出指定异常并中断执行时,可使用 throw() 方法,其具体调用方式参见图示。

Python 3生成器构造与使用

16、 生成器不仅可向外输出数据,还能在迭代过程中接收外部传入的信息。接下来以 DNA 转录程序为例,直观展示这一双向通信能力。

17、 注意红框部分代码:yield 实际上是一个表达式,它不仅能暂停执行并返回值,还能接收外部通过 send() 传入的数据,并将该值赋给变量 base,作为 yield 表达式的运算结果,驱动后续逻辑执行。

Python 3生成器构造与使用

18、 我们预先构造了一段 DNA 序列字符串,基于此创建了输入生成器 DNAgen,再将其传入 transcriber() 函数,获得转录生成器 tbr,为后续碱基配对转换提供基础支撑。

19、 如图所示代码完成了 DNA 转录过程的模拟。通过调用 tbr.send() 向生成器注入单个碱基,等效于一次 next() 操作,同时获取对应的 RNA 碱基输出。下方展示了完整的转录结果。

Python 3生成器构造与使用

20、 生成器拥有广泛的实际应用场景:例如利用其惰性特性,可逐行读取超大文本文件,避免一次性加载导致内存崩溃;亦可通过多层生成器嵌套搭建数据处理流水线,实现模块化、低耦合、高效率的数据流操作,显著增强程序的性能表现与工程可维护性。

Python 3生成器构造与使用

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

401

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

213

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1510

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

633

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

758

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

710

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

179

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

84

2025.08.07

java连接字符串方法汇总
java连接字符串方法汇总

本专题整合了java连接字符串教程合集,阅读专题下面的文章了解更多详细操作。

7

2026.02.05

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.4万人学习

Django 教程
Django 教程

共28课时 | 4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号