生成器与yield关键字
yield关键字使用在生成器函数中
yield与return
相同点:
函数执行到yield和return时,都将返回结果
不同点:
函数执行到return时,函数会结束调用
函数执行到yield时,函数会暂停,并记录当前的位置,下一次调用时从此位置继续执行
生成器函数被调用时的执行过程
生成器函数被调用后,返回了一个iterator
1.第一次调用iterator:
执行到第一个yield时,返回yield 1,暂停执行,记录此位置,等待下一次被调用
2.第二次调用iterator:
执行到第二个yield时,返回yield 2,暂停执行,记录此位置,等待下一次被调用
3.第三次调用iterator:
执行到第三个yield时,返回yield 3,暂停执行,记录此位置,等待下一次被调用
定义普通函数,return后面的代码不再执行
def Func() :
print('A 1')
return 1
print('B 2')
return 2
Func()
print(Func())
A 1
A 1
1
定义生成器函数,使用yield关键字
def func() :
print('A 1')
yield 1
print('B 2')
yield 2
print('C 3')
yield 3
调用生成器函数,返回iterator
res = func()
print(res)
<generator object func at 0x000000D19F0C00C8>
调用生成器函数返回的iterator
next(res)
print(next(res))
print(next(res))
A 1
B 2
2
C 3
3
list()、tuple()等容器类型函数调用生成器返回的iterator时,会把返回结果作为容器的元素
print(list(res))
print(tuple(res))
[]
()