python yield generator 生成器send发送数据
大家讲道理
大家讲道理 2017-04-17 11:49:49
[Python讨论组]
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的迭代?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(2)
黄舟

应该是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。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号