zoukankan      html  css  js  c++  java
  • Python之协程函数

    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('奥尔良堡'))            
  • 相关阅读:
    未解
    HDU 4642 Fliping game 解题报告
    HDU 4639 Hehe 解题报告
    深入浅出Node.js (11)
    JS文本框获取焦点
    深入理解 BFC
    JS 中函数名后面加与不加括号的区别
    ES6 箭头函数
    sublime 格式化代码
    <!--more-->搭建的博客设置主页内容高度
  • 原文地址:https://www.cnblogs.com/george92/p/9100325.html
Copyright © 2011-2022 走看看