专栏名称: python实战
Python实战
目录
相关文章推荐
Python爱好者社区  ·  刚刚,DeepSeek放出重磅论文!梁文锋亲 ... ·  昨天  
Python爱好者社区  ·  吴恩达,yyds ·  昨天  
Python开发者  ·  微信 + DeepSeek = 王炸组合 ·  3 天前  
Python爱好者社区  ·  刚刚!微信 DeepSeek ... ·  3 天前  
Python爱好者社区  ·  今年程序员这薪资是认真的吗? ·  3 天前  
51好读  ›  专栏  ›  python实战

Python生成器函数的工作方式

python实战  · 公众号  · Python  · 2017-02-15 19:16

正文


基本概念

生成器函数

任何一个在函数体中包含了 yield 关键字的Python函数,都是一个生成器函数。这个函数会返回一个生成器对象。

Guido表述

关于生成器,曾有过一段争论,Guido老爹在 PEP 255 -- Simple Generators 中也阐述了自己设计这个语法的观点。

示例

生成器函数示例


Python学习交流 330637182 群内每天更新相关资料

Python学习交流 330637182 群内每天更新相关资料

解析

  1. 可以从上例第一个输出看出来,生成器函数对象任然是一个函数对象。

  2. 可以从上例第二组输出看出来,生成器函数的返回结果是一个迭代对象。

  3. 可以从上例第三组输出看出来,生成器函数的返回结果是一个生成器对象。并且是一个迭代器。

  4. 可以从上例第三组输出看出来,yield 会对外生产它后面的对象。

  5. 可以从上例第三组输出看出来,next(生成器) 时,会出发下一个 yield。

  6. 可以从上例第三组输出看出来,当生成器结束时会抛出一个 StopIteration。

除此之外呢?

可能有人会右疑问,怎么可能把一个函数体中的内容分阶段迭代呢?原因是,每次yield的同时会讲函数提挂起,模拟出暂停的效果。

还有会疑问,为什么抛出的异常是 StopIteration,这是因为要满足 迭代器的语法。


Python学习交流 330637182 群内每天更新相关资料

Python学习交流 330637182 群内每天更新相关资料

可以看到,此处的表现正如我们上面所表述的那样,生成器可以帮助我们逐步生成数据。







请到「今天看啥」查看全文


推荐文章
Python爱好者社区  ·  吴恩达,yyds
昨天
Python开发者  ·  微信 + DeepSeek = 王炸组合
3 天前
Python爱好者社区  ·  今年程序员这薪资是认真的吗?
3 天前
电影票房  ·  2017年2月电影票房大数据报告
7 年前