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
    装饰器




  • 相关阅读:
    python函数内容
    python读写csv文件
    python正则表达式
    python使用MYSQL数据库
    python简单面试题
    python执行cmd命令
    python详解json模块
    我的自动化测试之路
    测试开发这一年
    招聘测试人员,我在面试什么?
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11378062.html
Copyright © 2011-2022 走看看