• 计算移动平均数


    题目:通过使用生成器来做到对每输入一个值就计算一次平均数。

    def init(func):
        def inner(*args,**kwargs):
            g = func(*args,**kwargs)
            g.__next__()
            return g
        return inner
    @init
    def avgrage():
        sum = 0
        count = 0
        avg = 0
        while True:
            num = yield avg
            sum += num
            count += 1
            avg = sum/count
    
    avg_g = avgrage()
    ret = avg_g.send(10)
    print(ret)
    ret = avg_g.send(76)
    print(ret)
    View Code

    通过给生成器装上一个装饰器,可以在对进行输入的时候少写一行代码。

    如果不加装饰器

    def avgrage():
        sum = 0
        count = 0
        avg = 0
        while True:
            num = yield avg
            sum += num
            count += 1
            avg = sum/count
    
    avg_g = avgrage()
    avg_g.__next__()
    ret = avg_g.send(10)
    print(ret)
    ret = avg_g.send(76)
    print(ret)
    View Code

    对比而言,加了装饰器可以在输入的时候少写一行代码、

    avg.__next__()

    ************

    (⊙﹏⊙),虽然对程序猿来说好像代码更多了。

    但是在用户角度来说,更显方便。

    输出结果

  • 相关阅读:
    数据应用
    Python邮件脚本
    函数
    tab模块
    python登陆,注册小程序
    三元运算+lambda表达式
    计算机基础
    软件测试概要
    asyn_fifo
    perl 对ENV环境变量的使用
  • 原文地址:https://www.cnblogs.com/zly9527/p/11374605.html
Copyright © 2020-2023  润新知