1、什么是Python 生成器(generator)
简单来理解,python 生成器是指一边生成一边计算的机制。
2、作用:
当有海量数据时,如果所有数据全部在内存里面,会占用很多的内存空间,例如:只想用列表前面的几个数据,后面没用到的数据就会占据大量内存空间。
如果列表元素按照某种算法推算出来,那我们就可以在循环的过程中不断推算出后续的元素,这样就不必创建完整的list,从而节省大量的空间
所以:又想要得到庞大的数据,又想让它占用空间少,那就用生成器
3、generator创建方式
方式一:
if __name__ == ‘__main__‘: str_generator = (x for x in ‘abcdefghijklmn‘) print(str_generator) <generator object <genexpr> at 0x0000022C54885308>
方式二:函数中带yield关键字
def foo(): for i in ‘abcdefghijklmn‘: yield i if __name__ == ‘__main__‘: for i in foo(): print(i)
4、工作原理:
1、生成器(generator)能够迭代的关键是它有一个next()方法,重复调用next()方法,直到捕获一个异常
2、带有 yield 的函数不再是一个普通函数,而是一个生成器generator
3、yield相当于 return 返回一个值,并且记住这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行
4、.send() 和next()一样,都能让生成器继续往下走一步(下次遇到yield停),但send()能传一个值,这个值作为yield表达式整体的结果
5、总结:
生成器仅仅保存了一套生成数值的算法,并且没有让这个算法现在就开始执行,而是我什么时候调它,它什么时候开始计算一个新的值,并给你返回。
原文:https://www.cnblogs.com/zhouzhiwei/p/13124119.html