Python之生成器

一、生成器定义
是一个特殊的迭代器(迭代器的抽象层层级更高),所以拥有迭代器的特性:
1、惰性计算数据,节省内存。解释:使用某个变量或者数组的拿取其中某个值,而不是全部拿取。
2、能够记录状态,并通过next()函数访问下一个状态
3、具备可迭代特性

但是,若果打造一个自己的迭代器,比较复杂,需要实现很多方法,所以,就有一个更加优雅的方法

二、创建方式
生成器表达式:把列表推导式中的[], 修改成()
列表推导式:x = [i for i in range(1,100) if i %2 == 0]
x = (i for i in range(1,100) if i %2 == 0)

在这里插入图片描述
生成器函数:
函数中包含 yield语句,这个函数的执行结果就是成撑起

在这里插入图片描述
第一次:
运行函数未被执行,并未输出任何。仅仅只是产生生成器。
第二次:
xxxx是295hang 的输出
1是296行 yield的返回出来的状态值,并未往下执行
在这里插入图片描述
当访问的状态值超过生成器的范围,会报错。
在这里插入图片描述

总结:yield可以阻断当前的函数执行,然后,当使用next函数或者__next__,都会让函数继续执行,然后,当执行到下一个,yield语句的时候,又会被暂停。

三、产生数据的方式
生成器具备可迭代特性。
next()函数,等价于 生成器__next__()
for in 生产数据
在这里插入图片描述

四、send 函数
send方法有一个参数,指定的是上一次被挂起的yield 语句的返回值。
相比于__next()__, 可以额外的给yield语句传值。

![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/661e79b3f238447889ae630a523d8555.png)
报错不能发的一个非空的值

在这里插入图片描述
注意第一次调用 send(None)
在这里插入图片描述
五、关闭生成器
close()
后续如果继续调用,会抛出StopIteration异常提示
在这里插入图片描述

注意:
若碰到return,会直接终止,抛出抛出StopIteration异常提示。并会显示return的值
在这里插入图片描述

生成器只会遍历一次
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

可厉害的土豆

你的鼓励是我创作的源泉

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

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

打赏作者

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

抵扣说明:

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

余额充值