python生成器 send()方法

本文详细解析了Python中生成器的send方法,通过实例解释了如何使用send方法重置生成器的生成序列,以及如何在producer和consumer模式下进行任务调度。

用途:使用方法send()重置生成器的生成序列。

send方法有一个参数,该参数指定的是上一次被挂起的yield语句的返回值。

例:producer()通过send方法给xie()发送任务:

def xie():
     print("等待接受任务")
     while True:
          data = (yield)
          print("成功接受任务:",data)
def producer():
     x = xie() #调用函数,处理任务
     x.__next__()
     for i in range(5):
          print("发送任务:%d"%i)
          x.send("任务%d"%i)
producer()

执行:

x.__next__手工方式调用方法,当函数执行到yield时先返回yield后面的值(yield返回的值是包含yield后值的迭代器对象,是迭代器!!)然后程序被挂起(可理解为中断),接着进入producer()函数的for循环,执行send()方法,执行send()方法后恢复producer的原状态(可理解为在中断位置接着执行),并把(yield)的值改为send()括号里的值,即data = "任务%d",第一次:data = "任务1",打印“成功接受任务”,并且再次执行到yield时返回yield后的值,程序被挂起,重新进入producer()函数进行第二次循环。

第二次……

第三次……

注意:再使用send()方法前,程序必须被挂起,不然会报错。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值