Python之协程函数
什么是协程函数:如果一个函数内部yield的使用方法是表达式形式的话,如x=yield,那么该函数成为协程函数。
defeater(name):print('%s start to eat food' %name)
food_list=[]whileTrue:
food=yieldfood_listprint('%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传一个值。
为协程函数添加初始化装饰器:
defwrapper(func):def inner(*args,**kwargs):
res= func(*args,**kwargs)
next(res)returnresreturninner
@wrapperdefeater(name):print('%s start to eat food' %name)
food_list=[]whileTrue:
food=yieldfood_listprint('%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('奥尔良堡'))