初步了解协程

def eater():
    print('start to eat')
    while True:
        food=yield
        print('is eating food:%s'%food)

def producer():
    dog=eater()
    next(dog) # 先next一次唤醒协程函数
    #然后下面的操作都是dog.send(值)
    food1='北京烤鸭'
    food2='鱼香肉丝'
    dog.send(food1)
    dog.send(food2)
producer()

输出结果:
start to eat
is eating food:北京烤鸭
is eating food:鱼香肉丝

如果有多个多个协程函数都需要初始化的话,我们用装饰器

def init(func):
    def warpper(*args,**kwargs):
        g=func(*args,**kwargs)
        next(g)
        return g
    return warpper

@init #eater=init(eater) #eater=warpper
def eater():
    print('start to eat')
    while True:
        food=yield
        print('is eating food:%s' % food)

e=eater()#e=warpper()
e.send('北京烤鸭')

输出结果:
start to eat
is eating food:北京烤鸭

如果我们在写项目的时候,并且有多个协程函数,我们需要写注释,该怎么写:

错误示例:

def init(func):
    def warpper(*args,**kwargs):
        '我是warpper函数'
        g=func(*args,**kwargs)
        next(g)
        return g
    return warpper

@init #eater=init(eater) #eater=warpper
def eater():
    '我是eater函数'
    print('start to eat')
    while True:
        food=yield
        print('is eating food:%s' % food)

print(help(eater))

输出结果:
Help on function warpper in module __main__:

warpper(*args, **kwargs)
    我是warpper函数

None

我们看的是eater函数的帮助信息,返回的却是warpper函数信息的帮助
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
  • 2022-12-23
  • 2022-12-23
  • 2021-11-12
  • 2021-06-02
猜你喜欢
  • 2022-12-23
  • 2022-03-10
  • 2022-12-23
  • 2021-11-13
  • 2022-12-23
  • 2021-10-21
  • 2021-09-03
相关资源
相似解决方案