• yield from巴啦啦


    def averager():
        print('测试子生成器')
        total = 0.0
        count = 0
        average = None
        while True:
            term = yield average
            if term is None:
                break
            total += term
            count += 1
            average = total / count
        return (count, average)
    
    
    from inspect import getgeneratorstate
    
    
    # 委派生成器
    def grouper1(r):
        while 1:
            ave = averager()
            r[1] = yield from ave  # 可以把yield from 理解成for 循环这个生成器,既不停的next
    
    
    r = {}
    g = grouper1(r)
    next(g)
    g.send(1)
    g.send(None)#1.终止子生成器,进行接下来的操作(下一个while循环之前);2.继续while循环,重新生成一个子生成器实例
    print(getgeneratorstate(g))
    print(r)
    g.send(3)
    g.send(None)
    print(r)
    
    
    # 1.next(g) 激活委派生成器,进入while 循环,代码执行到yield from 子生成器表达式,因为yiled from 具有for的功能,所以激活子生成器
    # 执行子生成器代码,执行到遇到第一个yield终止,回到next(g)调用方
    # 2.g.seng(1) 委派生成器直接把val扔给子生成器的term,代码开始执行,计算出average,执行下一次while循环,直到遇到yield 终止代码
    # 3.g.send(None) 委派生成器直接把val None 发送给term,继续执行is None break,子生成器执行结束 return 将return的值作为StopIteration的value属性;
    # yield from 可以捕获value,  执行{}的赋值
    # ***重点***复制之后,继续执行委派生成器的while循环,重新遇到yiled from 子生成器,继续执行子生成器的代码,知道遇到yield 结束代码
    
    
  • 相关阅读:
    SQL 查询两个时间段是否有交集的情况 三种写法
    c# 时间区间求并集
    uniapp 身份证识别 微信 百度 图片前端压缩 图片后端压缩
    Git命令大全
    构建android studio项目
    如何查tomcat进程和杀死进程
    mysql 备份 还原不了
    解决git extensions每次要输入用户名和密码
    JS string 转 Byte64[]
    Git cmd
  • 原文地址:https://www.cnblogs.com/liuer-mihou/p/12812929.html
Copyright © 2020-2023  润新知