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