生成器不仅可以输出值还可以接收值,但在接收值存在一个比较苦涩的知识点,对此进行说明
def gen_func():
exec1 = yield 'print1'
print(exec1)
exec2 = yield "print2"
print(exec2)
gen = gen_func()
send1 = next(gen) # 1.生成器入口,获取到print1的值,并中断程序, 保留程序地址和设置最后值为print1
send2 = gen.send("send2") # 2.在修改中断程序最后的值为send2,并 继续往下执行print(exec1)
print(send2)
结果:send2
print2
- 在留意生成器中的send可以发现在代码明面上exec1的print值应该为print1,但输出值却为 send2
- 根据该现象,我们可以大胆猜测 yiled在中断程序不仅保存了中断程序的地址,还保存中断程序的最后的值。
- 当send执行时,会修改中断程序的最后的值,再继续往下执行