zoukankan      html  css  js  c++  java
  • python 生成器中的send、移动平均值、列表表达式相关

    1.send

      def generato():
            print('关于send的使用方法')
            tmp = yield 1
            print('上面的就是send的应用')
            print(tmp)
            yield '现在来测试一下效果吧'
        
        g = generato()
        g.__next__()
        g.send('我们一起学python')
        
        #send 获取下一个值的效果和next基本一致
        #只是在获取下一个值的时候,给上一yield的位置传递一个数据
        #使用send的注意事项
            # 第一次使用生成器的时候 是用next获取下一个值
            # 最后一个yield不能接受外部的值
    

    2.生成器计算移动平均值

    def averager():
        total = 0.0
        count = 0
        average = None
        while True:
            term = yield average
            total += term
            count += 1
            average = total/count
    g_avg = averager()
    print(g_avg.__next__())
    print(g_avg.send(10))
    print(g_avg.send(30))
    

    升级版

    def init(func):
        def inner(*args,**kwargs):
            g = func(*args, **kwargs)
            g.__next__()
            return g
        return inner
    
    
    @init
    def averager():
        total = 0
        count = 0
        average = None
        while True:
            term = yield average
            total += term
            count += 1
            average = total/count
    g_avg = averager()
    print(g_avg.send(10))
    print(g_avg.send(30))
    

    生成器列表嵌套习题:

    def add(n,i):
        return n+i
    
    def test():
        for i in range(4):
            yield i
    
    g = test()
    for n in [1,10,5]:
        g = (add(n,i) for i in g)
    
        
        print(list(g))
    

    PS:遇到问题没人解答?需要Python学习资料?可以加点击下方链接自行获取
    note.youdao.com/noteshare?id=2dce86d0c2588ae7c0a88bee34324d76

    生成器的列表嵌套式一定要拆分写!!注意只有在yield额时候生成数据,在for循环中
    生成过两次g,不可以按照顺序执行下去,因为n=10时候的g是不可以赋值给n=5时候的g的,
    所以一定要拆分开来计算!

    def add(n,i):
        return n+i
    
    def test():
        for i in range(4):
            yield i
    
    g = test()
    for n in [1,10,5]:
        g = (add(5,i) for i in add(5,i) for i in add(5,i) for i in [0,1,2,3])  #按照解析的计算即可
    
    
    print(list(g))
    
  • 相关阅读:
    Central Contract无法传到ECC的排查工具
    直接采购在Core SRM与SRM PPS间的区别
    整理一下思路
    PR无法修改的几个原因
    MARCTRAME与MARCHTRAME
    Revision Level在PS中的决定
    Storage Location在物料分配时的选择逻辑
    如何正确删除WBS下的Planned Independent Requirement
    Open XML SDK 2.0
    Silverlight使用问题汇总一
  • 原文地址:https://www.cnblogs.com/python960410445/p/12104449.html
Copyright © 2011-2022 走看看