为何Python生成器在执行print(x)后仍会yield值?
理解Python生成器中send()与yield的执行流程
我们一步步拆解代码的执行过程,就能明白输出的由来:
第一次调用
next(s)- 生成器启动,进入
for i in range(5)循环,此时i=0 - 执行
x = yield i:yield先返回0,生成器暂停在这一行(此时还没给x完成赋值) - 外部
print(next(s))输出0
- 生成器启动,进入
调用
s.send(15)- 生成器从暂停的
x = yield i处恢复,把send传入的15赋值给x - 执行
print(x),输出15 - 循环继续,
i变为1,再次执行x = yield i:yield返回1,生成器再次暂停 - 外部
print(s.send(15))输出这个yield返回的1
- 生成器从暂停的
简单说:send()的作用分两步——先把传入的值赋值给yield左侧的变量,再让生成器继续执行到下一个yield语句,并返回该yield的结果。你看到的15是生成器内部print(x)的输出,1是send()方法返回的下一个yield的结果。
内容的提问来源于stack exchange,提问作者Ice Cube
相关产品推荐
相关产品推荐

