前言:很多初学者不知道generater,觉得很陌生,和列表list有什么区别,下面我就用通俗的语言讲解下
一、使用生成器的目的
首先是动态产生列表:
my_list=[x*x for x in range(500)]
在python中如果执行上面的一句语句,那么在内存中就会存在一个包含500个元素的列表,如果延伸下的话,那么可能上产生一个上万或者更多元素的列表,那么是比较消耗内存的,但是使用生成器就不会出现这个问题。
生成器的特点如下:
1.生成器的语句: data_generater= (x*x for x in range(5))
2.生成器可以一次不直接生成,可以用一次迭代一次
3.生成器生成每位数字后都不会保存
如下图为生成器演示:

从演示结果可见,使用生成器,每个数字只产生一遍,如果使用list,如下图所示:

二、yield
python生成器的产生必须使用yield
yield和return都是返回
return:返回后面expression的值
yield:返回一个generater,当前值就是expression的值,类似一个中介
使用的方法,举个例子:
写一个不大于max的偶数序列:

除了使用for来调用生成器对象
也可以使用generate._ _ next_ _()来一次一次使用


可见,每一次使用print都是使用一个generate对象,而且不会重复,当使用的次数超出总的限额,就会出现如下情况:


会出现异常,可以使用try来捕捉异常,防止运行错误 ,for循环中调用对象不会出现异常,是因为f程序运行过程中会自动的规避此类错误。
本文介绍了Python生成器的概念,对比了列表与生成器在内存消耗上的差异。通过实例展示了如何使用生成器表达式以及`yield`关键字来动态生成序列,强调了生成器的惰性计算特性。同时,文章还演示了如何通过`__next__()`方法逐次调用生成器。最后,讨论了在处理大量数据时使用生成器避免内存溢出的重要性,并建议在适当场景下优先考虑使用生成器。
1653

被折叠的 条评论
为什么被折叠?



