猿问

python yield generator 生成器send发送数据

defcountdown(n):
print"conuntingdownform",n
whilen>=0:
print"firstn:",n
newvalue=(yieldn)
print"secondn:",n
print"firstnewvalue",newvalue
ifnewvalueisnotNone:
n=newvalue
else:
n-=1
print"secondnewvalue",newvalue
c=countdown(5)
forninc:
#printn
ifn==5:
c.send(3)
输出结果:
conuntingdownform5
firstn:5
secondn:5
firstnewvalue3
secondnewvalue3
firstn:3
secondn:3
firstnewvalueNone
secondnewvalueNone
firstn:2
secondn:2
firstnewvalueNone
secondnewvalueNone
firstn:1
secondn:1
firstnewvalueNone
secondnewvalueNone
firstn:0
secondn:0
firstnewvalueNone
secondnewvalueNone
这个期间发送的send值是不是改变了n的值,是不是会继续进行n=3的迭代?
慕桂英546537
浏览 345回答 2
2回答

函数式编程

应该是send(3)作为(yield5)的返回值,赋值给newvalue。所以操作完后newvalue==3,后续的n=newvalue导致n发生变化。

忽然笑

如果没有send操作,newvalue的值应该为None。send(3)作为(yield5)的返回值,赋值给newvalue,所以n为3.从而导致后续的变化。值得注意的是yieldn会做为整个函数的返回值,而newvalue=yieldn,newvalue为None。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答