python3 yield send,python yield生成器send发送数据问题

def countdown(n):

print "conunting down form" ,n

while n>=0:

print "first n:",n

newvalue=(yield n)

print "second n:",n

print "first newvalue",newvalue

if newvalue is not None:

n=newvalue

else:

n-=1

print "second newvalue",newvalue

c=countdown(5)

for n in c:

# print n

if n==5:

c.send(3)

输出结果:

conunting down form 5

first n: 5

second n: 5

first newvalue 3

second newvalue 3

first n: 3

second n: 3

first newvalue None

second newvalue None

first n: 2

second n: 2

first newvalue None

second newvalue None

first n: 1

second n: 1

first newvalue None

second newvalue None

first n: 0

second n: 0

first newvalue None

second newvalue None

这个期间发送的send值是不是改变了n的值,是不是会继续进行n=3的迭代?

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

如果没有send操作,newvalue的值应该为None。send(3)作为(yield 5)的返回值,赋值给newvalue,所以n为3.从而导致后续的变化。值得注意的是yield n 会做为整个函数的返回值,而 newvalue = yield n,newvalue为None。

玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/wenda/wd20003.html

相关文章 Recommend

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值