为了账号安全,请及时绑定邮箱和手机立即绑定

python yield generator 生成器send发送数据

python yield generator 生成器send发送数据

慕桂英546537 2019-04-08 11:17:11
defcountdown(n):print"conuntingdownform",nwhilen>=0:print"firstn:",nnewvalue=(yieldn)print"secondn:",nprint"firstnewvalue",newvalueifnewvalueisnotNone:n=newvalueelse:n-=1print"secondnewvalue",newvaluec=countdown(5)forninc:#printnifn==5:c.send(3)输出结果:conuntingdownform5firstn:5secondn:5firstnewvalue3secondnewvalue3firstn:3secondn:3firstnewvalueNonesecondnewvalueNonefirstn:2secondn:2firstnewvalueNonesecondnewvalueNonefirstn:1secondn:1firstnewvalueNonesecondnewvalueNonefirstn:0secondn:0firstnewvalueNonesecondnewvalueNone这个期间发送的send值是不是改变了n的值,是不是会继续进行n=3的迭代?
查看完整描述

2 回答

?
函数式编程

TA贡献1807条经验 获得超9个赞

应该是send(3)作为(yield5)的返回值,赋值给newvalue。所以操作完后newvalue==3,后续的n=newvalue导致n发生变化。
                            
查看完整回答
反对 回复 2019-04-08
?
忽然笑

TA贡献1806条经验 获得超5个赞

如果没有send操作,newvalue的值应该为None。send(3)作为(yield5)的返回值,赋值给newvalue,所以n为3.从而导致后续的变化。值得注意的是yieldn会做为整个函数的返回值,而newvalue=yieldn,newvalue为None。
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 344 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信