理解生成器
定义生成器
yield关键字,可以让我们定义一个生成器函数。
def generator_func(): print('a') yield 1 g = generator_func() print(g)
>>> <generator object generator_func at 0x10e178b88>
推动生成器
使用next函数从生成器中取值
def generator_func(): print('a') yield 1 g = generator_func() ret1 = next(g) print(ret1)
>>>
a
1
使用next可以推动生成器的执行,下面的代码,我们可以看到每一次执行next可以让generator_func中的代码从上一个位置开始继续执行到yield,并且将yield后面的值返回到函数外部,最终我们可以执行到yield 3。
def generator_func(): print('a') yield 1 print('b') yield 2 print('c') yield 3 print('d') g = generator_func() ret1 = next(g) print(ret1) ret2 = next(g) print(ret2) ret3 = next(g) print(ret3)
>>>
a
1
b
2
c
3
当函数中已经没有更多的yield时继续执行next(g),遇到StopIteration
def generator_func(): print('a') yield 1 print('b') yield 2 print('c') yield 3 print('d') g = generator_func() ret1 = next(g) print(ret1) ret2 = next(g) print(ret2) ret3 = next(g) print(ret3) next(g)