1 协程函数
1.1 协程函数理解
协程函数就是使用了yield表达式形式的生成器
def eater(name):
print("%s eat food" %name)
while True:
food = yield
print("done")
g = eater("gangdan")
print(g)
结果:
generator object eater at 0x00000000028DC048
这里就证明了g现在就是生成器函数
1. 2 协程函数赋值过程
用的是yield的表达式形式
要先运行next(),让函数初始化并停在yield,相当于初始化函数,然后再send() ,send会给yield传一个值
** next()和send() 都是让函数在上次暂停的位置继续运行,
next是让函数初始化
send在触发下一次代码的执行时,会给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)
e=eater('钢蛋') # wrapper('')
# print(e)
print(next(e)) # 现在是运行函数,让函数初始化
print(e.send('包子')) #
print(e.send('韭菜馅包子'))
print(e.send('大蒜包子'))
这里的关键是:
要先运行next()函数
用装饰器函数把next()函数先运行一次:
def start(func):
def wrapper(*args,**kwargs):
res=func(*args,**kwargs) # next()
next(res) # 这是关键
return res
return wrapper
@start # e = start(e)
def eater(name):
print('%s start to eat food' %name)
food_list=[]
while True:
food=yield food_list
print('%s get