前言:很多初学者不知道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程序运行过程中会自动的规避此类错误。