30.Python三大器(3)----生成器

1.初识生成器

生成器就是自定义的迭代器
生成器的定义:

def func():
	print(1)
	yield 1
	print(2)			#yield的返回值相当于__next__()获得的值
	yield 2
	print(3)
	yield 3

ret = func()
print(ret)				结果是:<generator object func at 0x0000023293B52C50>   生成器对象
print(ret.__iter__)		结果是:<method-wrapper '__iter__' of generator object at 0x0000023293B52C50>
print(ret.__next__)		结果是:<method-wrapper '__next__' of generator object at 0x0000023293B52C50>

当函数有yield关键字时,调用函数会得到一个生成器返回值,使用生成器的__next__()会执行yield之前的函数体代码,然后将yield返回的值当做函数调用的返回值

yield与return的区别:yield可以返回多次值,return只会返回一次值

示例代码:

def func():
	print("第一次")
	yield 1
	print("第二次")
	yield 2
	print("第三次")
	yield 3 
ret = func()
ret1 = next(ret)
print(ret1)
ret2 = next(ret)
print(ret2)
ret3 = next(ret)
print(ret3)
next(ret)

结果如下:
在这里插入图片描述
前三次,生成器中都有yield返回值,所以不会报错,第四次没有yield返回值,也就是迭代器去不到值了,所以就会抛出StopIteration的错误

2.进阶

def func():
	while 1:
		x = yield 1
		print(x)
g = func()   #生成一个生成器对象
g.send(None)  #相当于next(g)
g.send("哈哈")    
g.send("呵呵")
g.close()

注意事项:
	1.send()可以给yield传值,yield将值转交给x
	2.在使用send()之前,必须先让生成器取一次值
	3.send(None) == next()

结果如下:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值