python生成器 send()方法

用途:使用方法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()方法前,程序必须被挂起,不然会报错。

猜你喜欢

转载自blog.csdn.net/qq_42018521/article/details/86771290