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程序运行过程中会自动的规避此类错误。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哈哈浩的大哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值