生成器的本质就是迭代器。
生成器包括两种:生成器函数 和 生成器表达式
一、生成器函数
- 一个包含yield关键字的函数就是一个生成器函数。
生成器函数执行之后会得到一个生成器作为返回值,并不会执行函数体。
执行了__next__()方法之后才会执行函数体,并且获得返回值。
next()内置方法,内部调用生成器函数的__next__()方法。
yield和return相同的是可以返回值,但是不同的是yield不会结束函数。
yield不能和return共用,并且yield只能在函数内。
练习1:创建一个生成器,并且调用
def generator():
print('zzz')
yield
ret = generator()
print(ret)
# <generator object generator at 0x00000000021665E8>
# 返回一个生成器对象,并没有执行生成器中的函数体
# 调用__next__()方法执行函数体
ret.__next__()
练习2:创建一个生成器,并且设置返回值
def generator():
print('zzz')
yield 1
ret = generator() # 调用生成器函数的时候,不执行函数体,返回一个生成器对象
# res 变量用来接收返回值
res = ret.__next__() # 调用__next__()方法执行函数体,
print(res) # 1
练习3:创建生成器,定义多个yield值
def generator():