首页 > 其他 > 详细

yield和send

时间:2019-10-14 10:34:44      阅读:60      评论:0      收藏:0      [点我收藏+]

前面已经说过yield的作用:

1、类似于return每次返回一个值

2、代码块(函数)暂停在yield的位置,下次调用时继续执行yield之后和之前的代码块

3、通过next(f)获取到yield的返回值

 

send的作用其实和yield类似:

1、类似于return每次返回一个值

2、代码块(函数)暂停在yield的位置,下次调用时继续执行yield之后和之前的代码块

3、send(x)可以理解为next(x),也就是把send的结果当做yield的返回值给next来获取

 

有点拗口,下面直接看例子:

def c():
    n = 0
    while n < 2:
        n += 1
        print(...,n)
        s = yield n
        print(s)
    return done

a = c()

 

for i in range(8):
    try:
        print(next(a))
    except StopIteration as e:
        print(e)
        break

执行结果:

... 1
1
None
... 2
2
None
done

再看个例子:

for i in range(8):
    try:
        if i == 1:
            a.send(8)  # send(x)等同于吧yield之后和之前的代码执行一遍,并返回x的值给next(a)
            print(next(a))  # 这里会继续调用next,继续执行yield之后的代码直到yield
        else:
            print(next(a))
    except StopIteration as e:
        print(e)
        break

执行结果:

... 1
1
8
... 2
None
done

 

yield和send

原文:https://www.cnblogs.com/wjlv/p/11669615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!