关于yield的骚操作

yield的可以定义迭代对象的返回值,可以看做类似于注解一类的标识

当满足出发条件时,即调用__next__()方法时,自动调用yield修饰的值,并进行返回

def mrange(start=0,end,step=1):
    while start < end:
        yield start
        start += 1

利用yield进行返回的值,必定是一个迭代对象

同时,作为一个返回值的方法,yield不仅可以返回内部定义修饰的值,也可以传入参数,从外部定义返回的值

def get():
    while True:
        receive = yield
        print('receive is {}'.format(receive))

首先,通过__next__()触发,执行yield的传值功能

然后外部调用send()方法进行yield返回值的传入,就可以通过外部传入影响内部的操作

借由yield,通过__next__()的激活,send()的传入就可以在后面的语句中进行操作,实现生产者send(),消费者模式

简单的实现一种异步的操作

a = get()
a.__next__()
a.send('ok')
注意:

1)yield包含了返回的意思,所以不能return yield

2)函数返回后,操作就会结束,所以利用这种方法不能进行返回,并且操作要定义在while True中

3)这种方法下,只会在程序步骤中阻塞,语句执行完毕,即使是while True中,程序也会结束,可以多次的__next__()和send(),但是语句执行完毕,不再操作时,函数会自动退出,不会一直阻塞

def get(name):
    while True:
        receive = yield
        print('name:{}\treceive is {}'.format(name, receive))

a = get('a')
a.__next__()
b = get('b')
b.__next__()
for value in range(10):
    a.send(value)
    b.send(value)



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值