• Python正课42 —— yield表达式


    本文内容皆为作者原创,如需转载,请注明出处:https://www.cnblogs.com/xuexianqi/p/12564614.html

    一:生成器的高级玩法之yield挂起函数:yield的表达式形式(了解***)

    def dog(name):
        print('道哥%s准备吃东西了...' % name)
        while True:
            # x拿到的是yield接收到的值
            x = yield  # x = '一根骨头'
            print('道哥%s吃了 %s' % (name, x))
    
    
    g = dog('alex')
    
    g.send(None)  # 等同于next(g),先完成初始化
    
    g.send('一根骨头')
    # g.send('一根骨头','肉包子')    # 不能传2个值,会报错:TypeError: send() takes exactly one argument (2 given)
    g.send(['一根骨头','肉包子'])    # 可以放到列表里传输,列表算是一个值
    g.send('肉包子')
    g.send('一桶泔水')
    # g.close()
    # g.send('1111') # 关闭之后无法传值
    

    二:综合应用

    def dog(name):
        food_list = []
        print('大哥%s准备吃东西了...' % name)
        while True:
            # x拿到的是yield接收到的值
            # x = yield 111 # x = ['一根骨头','肉包子']
            x = yield food_list # x = ['一根骨头','肉包子']
            print('大哥%s抽了 %s' % (name, x))
            food_list.append(x)
    
    
    g = dog('egon')
    
    res = g.send(None)  # 等同于next(g),先完成初始化
    print(res)
    
    res = g.send(['一个鞭炮','一根烟'])
    print(res)
    
    res = g.send('一个地雷')
    print(res)
    
    def func():
        print('start...')
        x = yield 111
        print('H哈哈')
        print('H哈哈')
        print('H哈哈')
        yield 222
    
    g = func()
    res = next(g)
    print(res)
    
    res = g.send('xxxx')
    print(res)
    
  • 相关阅读:
    Mysql 一主两从架构转换成级联复制
    redis安装配置
    SQL语句中----删除表数据drop、truncate和delete的用法
    编译安装apache2.4.28错误
    zabbix3.2.5编译安装部署
    Keepalived 高可用集群实践
    sersync+rsync实时同步备份部署
    LINE学习
    DeepWalk学习
    csv文件的读取
  • 原文地址:https://www.cnblogs.com/xuexianqi/p/12564614.html
Copyright © 2020-2023  润新知