一、生成器
生成器的本质就是迭代器;
生成器其实是能够产生多个数据的容器,而不是真正同时保存多个数据的容器
二、怎么创建生成器
调用带有yield关键字的函数就能得到一个生成器
比较:
调用普通函数:a.执行函数体 b.获取函数返回值
调用带有yield关键字的函数:a.不执行函数体 b.获取到的是生成器对象
三、生成器怎么生产数据
a. 一个生成器能生产多少数据? - 看执行生成器对应的函数,在函数结束的时候能够遇到几次yield,就能生产多少个数据
b. 生成器生产的数据是哪些? - 看每次遇到 yield 后面的数据是什么,产生的数据就是什么
四、生成器产生数据的原理
调用函数创建生成器对象的时候不会执行函数体;当获取生成器中的元素的时候才会执行函数体。
获取第一个元素的时候从函数开始开始执行,执行遇到第一个yield就会停下来,并且将yield后面的数据作为这次获取到的元素,下次获取元素的时候从上一次结束的位置接着往后执行函数体直到遇到下一个yield,并且将新的yield的数据作为新的元素,
以此类推
如果从上次结束的位置开始到函数结束都没有遇到yield那么这个生成器就不会再创建数据了,如果是next操作,这个时候会报错
注:每次调用函数的时候都是在创建新的生成器对象