专栏名称: python实战
Python实战
目录
相关文章推荐
Python爱好者社区  ·  算法入门手册 ·  3 天前  
Python爱好者社区  ·  全网最全 ... ·  3 天前  
Python爱好者社区  ·  不是华为目标院校,直接被华为判死刑。。。 ·  3 天前  
Python爱好者社区  ·  今天面了一个阿里算法女生,当场想给她offer! ·  6 天前  
Python爱好者社区  ·  Python 自动化运维 100个常见问题.pdf ·  4 天前  
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读者君可以加我们Python学习交流 330637182群内有大量的实战和新手资料视频千人大群等你加入。




 
发扬利他之心,同学们可以转载分享这篇文章,让

更多想要学习的同学共同学习进步!赠人玫瑰,手有

余香!