之前一直感觉对生成器的理解不够,想再专门写一篇深入理解一下生成器:
1.生成器简介:
python中,含有yield关键字的对象就是一个生成器,每次调用next方法时会执行到yield后面的语句,然后返回yield后面代码块的执行结果,并挂起。
next方法
def foo():
a = yield 1 # bar_a是语句块(yield 1)的返回值,默认为None
b = yield a
yield "最后一个值,再迭代就要报StopIteration了"
f = foo() # 创建生成器,此时没有执行foo()里的任何语句
print(next(f)) # 从foo()里进入,一直执行到(yield 1)处,此时变量a还没有创建,直接返回yield后面的代码块
print(next(f)) # 先将语句块(yield 1)的返回值赋值个a,此时a的值是None。
# 然后执行到语句块(yield a),b也还没有被创建
print(next(f))
执行结果:
1
None
最后一个值,再迭代就要报StopIteration了
第一个next调用,相当于启动生成器,会从生