一、生成器
1.定义:生成器本质就是迭代器
2.生成器包括两种:生成器函数和生成器表达式
3.一个包含yield关键字的函数就是一个生成器函数,并且yield不能喝return同时存在,yield只能用在函数内
4.乘生气函数执行之后会得到一个迭代器作为返回值,不会执行函数体
5.执行__next__()方法后,才会执行函数体,获得返回值,
6.yield和return都可以返回值,但是yield不能结束函数,return可以。
1>yield方法创建一个生成器:
def genderator():
print('sss')
yield
print('zzz')
g=genderator()
print(g)#返回一个迭代器
print(next(g))#调用next方法之后才会执行函数体,遇到yield停止执行程序。
#print(next(g))#报错,再次调用next,程序往下执行,找不到yield,系统崩溃,报错
结果:
<generator object genderator at 0x0000000001F56888>
ssss
None
2>yield 返回值
yield 返回值
def genderator():
print('zzzz')
yield 1
g=genderator()
ret=next(g)#yield 将 1 返回给ret
print(ret)
结果:
zzzz
1
3>创建生成器,生产200万桶泡面
for会自动调用g迭代器的__next__()方法,将迭代器中的内容依次取出
def ksf():
for i in range(1,2000000):
yield '正在生产第{}桶泡面'.format(i)
g=ksf()
for pm in g:
print(pm)
send()方法:
1.获取下一个值,效果和next基本一样
2.第一次使用生成器是,使用__next__传递第一个值,不能使用send(),最后一个也不能用send()
1>使用send()方法给yield传递参数
def gendera():
print('aa')
content=yield 1