zoukankan      html  css  js  c++  java
  • 生成器send的用法案例

    生成器函数send方法案例:
    每输入一个值,求移动平均值,如下:
    10 20 30 40 50...
    10 15 20 25 30...
    def avg_creater():
        num = 0
        count = 0
        avg = 0
        while True:
            num1 = yield avg
            num += num1
            count += 1
            avg = num/count
    
    g = avg_creater()
    g.__next__()
    avg = g.send(10)
    avg = g.send(20)
    avg = g.send(30)
    avg = g.send(40)
    avg = g.send(50)
    print(avg)
    
    
    #打印:
    30.0
    但是每次使用时,第一次读取数据都必须用next接收,所以可以把这一步可以用装饰器函数替代,从而不用每次调用都要先使用next
    预激生成器函数:
    def avgcorator(f):
        def inner(*args,**kwargs):
            g = f(*args,**kwargs)
            g.__next__()
            return g
        return inner
    
    @avgcorator
    def func():
        num = 0
        count = 0
        avg = 0
        while True:
            num1 = yield avg
            num += num1
            count += 1
            avg = num / count
    g = func()
    avg = g.send(10)
    avg = g.send(20)
    avg = g.send(30)
    avg = g.send(40)
    avg = g.send(50)
    print(avg)
    
    #打印:
    30.0
    知识点:
    生成器:send
    装饰器




  • 相关阅读:
    异或(^/XOR)的研究
    FastJson的使用
    KindEditor使用
    Java之Collection一
    Java之String
    Github基本使用
    Ubuntu jekyll git使用小记
    使用html editor 打开freemarker文件
    struts.xml 标签顺序
    multipart/form-data ajax 提交问题(未解决)
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11378062.html
Copyright © 2011-2022 走看看