Python生成器(generator)和关键字:yield

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

猜你喜欢

转载自blog.csdn.net/likunpengjiayou/article/details/124299512
今日推荐