免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1473 | 回复: 2
打印 上一主题 下一主题

yield的使用疑问 [复制链接]

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:01:44程序设计版块每日发帖之星
日期:2015-06-28 22:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-12-15 11:38 |只看该作者 |倒序浏览
def counter(start=0):
    count=start
    while True:
        val=(yield count)
        count+=1

执行如下:
>>> c.next()
5
>>> c.next()
6
>>> c.send(10)
7
>>> c.next()
8
执行c.send(10)之后,预期应该是输出11的,但是还是按照加一的输出
程序改成如下后,输出正常
def counter(start=0):
    count=start
    while True:
        val=(yield count)
        if val is not None:
            count=val
        else:
            count+=1

对yield语句有几点疑问,
1 if val is not None,val这个参数应该是一直不为None的,那么就应该进入count=val而不是count+=1
2 为什么之前的程序执行c.send()后不生效?

论坛徽章:
5
巨蟹座
日期:2014-08-28 18:12:342015年迎新春徽章
日期:2015-03-04 10:01:4415-16赛季CBA联赛之江苏
日期:2016-04-28 09:43:3115-16赛季CBA联赛之吉林
日期:2016-06-22 10:34:4315-16赛季CBA联赛之山西
日期:2016-08-16 16:29:55
2 [报告]
发表于 2014-12-15 15:29 |只看该作者
来自官方的
When a generator function is resumed with a next() method, the current yield expression always evaluates to None.

论坛徽章:
2
2015年迎新春徽章
日期:2015-03-04 10:01:44程序设计版块每日发帖之星
日期:2015-06-28 22:20:00
3 [报告]
发表于 2014-12-17 10:31 |只看该作者
回复 2# Linux_manne

1 意思是说只要调用了.next(),那么 val=(yield count) 这个语句val的值都是None?
2  为什么之前的程序执行c.send()后不生效?这个是什么原因呢
   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP