Python之协程函数
什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数。
def eater(name): print('%s start to eat food' %name) food_list=[] while True: food=yield food_list print('%s get %s ,to start eat' %(name,food)) food_list.append(food) print('done') e=eater('钢蛋') # print(e) print(next(e)) print(e.send('奥尔良烤翅')) print(e.send('香辣鸡腿堡')) print(e.send('奥尔良堡'))
e.send 和 next(e) 的区别:
1. 如果函数内yield是表达式形式,那么必须是先next(e)
2. 二者的共同之处是都是可以让函数在上次暂停的位置继续运行,不一样的地方在于send在触发下一次代码的执行时,会顺利给yield传一个值。
为协程函数添加初始化装饰器:
def wrapper(func): def inner(*args,**kwargs): res = func(*args,**kwargs) next(res) return res return inner @wrapper def eater(name): print('%s start to eat food' %name) food_list=[] while True: food=yield food_list print('%s get %s ,to start eat' %(name,food)) food_list.append(food) print('done') e=eater('钢蛋') # print(e) print(next(e)) print(e.send('奥尔良烤翅')) print(e.send('香辣鸡腿堡')) print(e.send('奥尔良堡'))