简单说:时间换空间!想要得到庞大的数据,又想让它占用空间少,那就用生成器!延迟计算!需要的时候,再计算出数据!
创建生成器的方式二(生成器函数)生成器函数:
如果一个函数中包含yield关键字,那么这个函数就不再是一个普通函数,调用函数就是创建了一个生成器(generator)对象。生成器函数:其实就是利用关键字yield一次性返回一个结果,阻塞,重新开始
生成器函数的工作原理原理是这样的:生成器函数返回一个迭代器,for循环对这个迭代器不断调用__next__()函数,不断运行到下一个yield语句,一次一次取得每一个返回值,直到没有yield语句为止,最终引发StopIteration异常。1yield相当于return返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句(不是下一行)开始执行。2send()和next()一样,都能让生成器继续往下走一步(下次遇到yield停),但send()能传一个值,这个值作为yield表达式整体的结果3生成器推导式底层原理也是这样的。
创建一个迭代器一个类作为一个迭代器使用需要在类中实现两个方法__iter__()与__next__()__iter__()方法返回一个特殊的迭代器对象,这个迭代器对象实现了__next__()方法并通过StopIteration异常标识迭代的完成。