基本概念
生成器函数
任何一个在函数体中包含了 yield 关键字的Python函数,都是一个生成器函数。这个函数会返回一个生成器对象。
Guido表述
关于生成器,曾有过一段争论,Guido老爹在 PEP 255 -- Simple Generators 中也阐述了自己设计这个语法的观点。
示例
生成器函数示例
Python学习交流 330637182 群内每天更新相关资料
Python学习交流 330637182 群内每天更新相关资料
解析
可以从上例第一个输出看出来,生成器函数对象任然是一个函数对象。
可以从上例第二组输出看出来,生成器函数的返回结果是一个迭代对象。
可以从上例第三组输出看出来,生成器函数的返回结果是一个生成器对象。并且是一个迭代器。
可以从上例第三组输出看出来,yield 会对外生产它后面的对象。
可以从上例第三组输出看出来,next(生成器) 时,会出发下一个 yield。
可以从上例第三组输出看出来,当生成器结束时会抛出一个 StopIteration。
除此之外呢?
可能有人会右疑问,怎么可能把一个函数体中的内容分阶段迭代呢?原因是,每次yield的同时会讲函数提挂起,模拟出暂停的效果。
还有会疑问,为什么抛出的异常是 StopIteration,这是因为要满足 迭代器的语法。
Python学习交流 330637182 群内每天更新相关资料
Python学习交流 330637182 群内每天更新相关资料
可以看到,此处的表现正如我们上面所表述的那样,生成器可以帮助我们逐步生成数据。
喜欢Python读者君可以加我们Python学习交流 330637182群内有大量的实战和新手资料视频千人大群等你加入。