协程函数
实例:
def menu(x):
print("welcome %s to shaxian restaurant" % x)
men_list = []
while True:
print(men_list)
food = yield men_list
print("%s start to eat %s" % (x, food))
men_list.append(food)
g = menu('张三')
next(g)
g.send('包子') # 将'包子'传给yield ,然后赋值给了food,然后从上次暂停的位置接着执行代码,直到又到下一个yield
g.send('饺子')
g.send('牛肉面')
g.send与next(g)的区别是:
1.如果函数内yield是表达式形式,那么必须先next(g)
2.二者的共同之处都是可以让函数在上一次暂停的位置继续运行,不一样的地方在于send在触发下一次代码的执行时,会顺便给yield传一个值
如果不想写next的初始化,而直接调用send,可以选择加个装饰器
def happy(fuc):
def f1(*args, **kwargs):
res = fuc(*args, **kwargs)
next(res) #让函数调用时自动初始化next
return res
return f1
@happy
def menu(x):
print("welcome %s to shaxian restaurant" % x)
men_list = []
while True:
print(men_list)
food = yield men_list
print("%s start to eat %s" % (x, food))
men_list.append(food)
g = menu('张三')
g.send('包子')
# 将'包子'传给yield ,然后赋值给了food,然后从上次暂停的位置接着执行代码,直到又到下一个yield
g.send('饺子')
g.send('牛肉面')