网易首页 > 网易号 > 正文 申请入驻

Python:生成器函数的应用场景

0
分享至

生成器函数并不是为“节省内存”这一单一目标而设计的。它真正提供的是一种分阶段执行模型:函数可以在多个 yield 之间暂停与恢复,其执行状态由运行期对象承载。

因此,生成器函数适用于一类具有共同特征的场景:

• 结果需要逐步产生

• 过程需要阶段性推进

• 状态应自然嵌入控制流

一、构造惰性序列

生成器函数最直接的用途,是构造“惰性序列”。与一次性构造完整数据结构不同,生成器在每次请求元素时才推进到下一个 yield。

示例:

        

使用:

print(list(g))

输出:

[4, 9, 16]

可以看到:

• 生成器不会预先生成全部结果

• 每次 next() 仅推进一次执行

• 函数体在 yield 处暂停

• 局部变量与指令位置被保留

这使生成器特别适合:

• 数据规模较大

• 只消费部分结果

• 计算代价较高

生成器不仅仅是列表推导式的惰性版本,而是一种“可暂停函数”的执行模型。

二、表达无限序列

生成器函数天然适合表达理论上无界的数据流。由于执行是按需推进的,无需预先构造完整结构。

示例:

        

使用:

输出:

10 11 12 13 14

该生成器在逻辑上是无限的,但由于执行按需推进,程序仍可稳定运行。

这种能力在以下场景中尤为重要:

• 实时数据流

• 持续监听事件

• 模拟连续信号

生成器将“潜在无限”转化为“有限推进”。

三、流式数据处理

生成器函数常被用于封装 I/O 逻辑,使数据处理呈现为连续流。

示例:逐行读取大文件

            

调用方式:

    

这种结构具有明显优势:

• 不一次性加载全部数据

• 文件资源在生成器执行完成后自动释放

• 调用方无需关心 I/O 管理细节

生成器在这里提供的是一种“按需交付”的结构能力。

四、构建数据处理管道

生成器函数可以相互组合,形成分层数据处理管道。每一层负责单一转换逻辑。

例如:

        

组合使用:

输出:

0 4 16 36 64

该结构的特征:

• 数据逐层流动

• 每层只处理当前元素

• 无需构造中间列表

• 保持惰性执行

生成器函数在此成为构建数据流管道的核心工具。

五、表达状态机与多阶段流程

生成器函数可以自然表达多阶段执行逻辑。

示例:简单有限状态机

        

阶段顺序由代码结构表达,而无需显式维护状态变量。

再如分阶段任务:

    

控制流程:

next(t)

生成器将“阶段位置”嵌入控制流结构,而不是通过布尔变量或枚举值管理。

六、替代临时中间结构

生成器表达式常用于替代临时列表,从而避免额外内存占用。从语义层面看,它等价于一个匿名生成器函数的即时调用。

比如像 sum() 这样的会逐步消费生成器,不会构造中间完整列表:

total = sum(x * x for x in range(1000000))

若写成:

total = sum([x * x for x in range(1000000)])

则会构造一个包含一百万个元素的列表,占用额外内存。

生成器表达式将计算与消费合并为惰性流程,是性能优化与结构清晰之间的合理折中。

七、协程式交互

生成器函数不仅能产出值,还能通过 send() 接收外部输入。

示例:

        

使用:

e.send("world")

在这里,yield 既是暂停点,同时也是输入接收点。

控制权在调用方与生成器之间显式交替。这种机制在 async/await 引入之前,已被用于实现协程框架。

小结

生成器是以函数语法构造、以迭代语义运行的执行结构。它通过 yield 将连续执行拆分为可暂停、可恢复的推进过程。惰性序列构造、无限数据流表达、流式处理、管道组合以及状态机实现,均依赖于这一分阶段执行模型。生成器将“函数调用”转化为“可推进执行过程”,在对象模型层面提供了一种精细而高效的控制机制。


点赞有美意,赞赏是鼓励

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
一夜爆火!八千元就能买匹迷你小马?马主:隐性开销大得吓死人……

一夜爆火!八千元就能买匹迷你小马?马主:隐性开销大得吓死人……

环球网资讯
2026-02-13 20:40:28
男子在深圳前往广州的列车上打盹,5分钟内49000元现金被偷,警方:在出租屋内抓到小偷

男子在深圳前往广州的列车上打盹,5分钟内49000元现金被偷,警方:在出租屋内抓到小偷

环球网资讯
2026-02-13 07:54:22
前光明网女记者立遗书举报官员被百万封口,拒绝后遭强制传唤!

前光明网女记者立遗书举报官员被百万封口,拒绝后遭强制传唤!

兵叔评说
2026-02-13 13:49:48
斯拉夫不相信寒冷——俄乌血战扎波罗热,乌军夺回150平方公里

斯拉夫不相信寒冷——俄乌血战扎波罗热,乌军夺回150平方公里

史政先锋
2026-02-13 21:26:31
国际奥委会取消处罚:已有约660名乌克兰运动员在战争中被杀害

国际奥委会取消处罚:已有约660名乌克兰运动员在战争中被杀害

鹰眼Defence
2026-02-13 12:15:29
恒基地产主席李家诚控告女星周秀娜

恒基地产主席李家诚控告女星周秀娜

每日经济新闻
2026-02-13 20:13:06
樊振东遭遇德甲独特规则,第四盘对手竟然换人出战

樊振东遭遇德甲独特规则,第四盘对手竟然换人出战

卿子书
2026-02-13 16:50:47
不看不知道一看吓一跳,女子短道速滑已改天换地,错怪范可新了

不看不知道一看吓一跳,女子短道速滑已改天换地,错怪范可新了

真理是我亲戚
2026-02-13 10:30:43
华为通报:原终端BG多媒体技术部部长被批准逮捕

华为通报:原终端BG多媒体技术部部长被批准逮捕

界面新闻
2026-02-13 13:49:20
韩媒讥讽中国队冬奥或0金:离开主场优势不行,谷爱凌是唯一希望

韩媒讥讽中国队冬奥或0金:离开主场优势不行,谷爱凌是唯一希望

杨华评论
2026-02-13 19:04:46
张一鸣以一己之力单挑整个互联网

张一鸣以一己之力单挑整个互联网

磐石之心
2026-02-12 12:01:31
浙江“一人公司”兴起!前大厂程序员靠AI月入200万元:“完全不需要员工”

浙江“一人公司”兴起!前大厂程序员靠AI月入200万元:“完全不需要员工”

环球网资讯
2026-02-13 20:27:07
首次访华前,德国总理默茨发言中将中欧对比引发关注

首次访华前,德国总理默茨发言中将中欧对比引发关注

澎湃新闻
2026-02-12 17:34:26
河南一男子过年回家发现外籍妻子失联,还带走了全部家当;当事人:登录妻子微信,发现她给陌生男人转账20多万;当地村委已介入协调

河南一男子过年回家发现外籍妻子失联,还带走了全部家当;当事人:登录妻子微信,发现她给陌生男人转账20多万;当地村委已介入协调

扬子晚报
2026-02-12 21:30:03
中美外长会面

中美外长会面

财闻
2026-02-13 21:50:43
“靴子落地”!刚刚,证监会发布

“靴子落地”!刚刚,证监会发布

中国基金报
2026-02-13 18:30:40
最新进展:日本放人

最新进展:日本放人

观察者网
2026-02-13 21:34:10
有种感觉,暴风雨前的宁静,马上就要被撕开了。

有种感觉,暴风雨前的宁静,马上就要被撕开了。

南权先生
2026-02-13 15:25:33
大孤山幕后大佬疑为姜育恒,名单曝光被质疑洗钱,秦岚遭深扒!

大孤山幕后大佬疑为姜育恒,名单曝光被质疑洗钱,秦岚遭深扒!

古希腊掌管月桂的神
2026-02-12 16:03:29
13岁体操冠军傅佳丽被虐待致跳楼,央媒跟进:2名涉事教练被立案

13岁体操冠军傅佳丽被虐待致跳楼,央媒跟进:2名涉事教练被立案

奇思妙想草叶君
2026-02-12 20:11:52
2026-02-14 03:24:49
MediaTea
MediaTea
专业的数字媒体、新媒体技术
1754文章数 74关注度
往期回顾 全部

科技要闻

独家探访蔡磊:答不完的卷子 死磕最后一程

头条要闻

8千元的迷你小马一夜爆火 马主:1天排泄次数达十几次

头条要闻

8千元的迷你小马一夜爆火 马主:1天排泄次数达十几次

体育要闻

这张照片背后,是米兰冬奥最催泪的故事

娱乐要闻

大衣哥女儿风光出嫁,农村婚礼超朴素

财经要闻

华莱士母公司退市 疯狂扩张下的食安隐忧

汽车要闻

探秘比亚迪巴西工厂 居然是这个画风!

态度原创

教育
旅游
家居
房产
公开课

教育要闻

今年的IC真的太霸道了!

旅游要闻

土耳其自驾行记(八)地中海边的慢时光——卡什小镇

家居要闻

中古雅韵 乐韵伴日常

房产要闻

三亚新机场,又传出新消息!

公开课

李玫瑾:为什么性格比能力更重要?

无障碍浏览 进入关怀版