美文网首页
python yield 用法

python yield 用法

作者: 小五_555 | 来源:发表于2016-07-13 11:24 被阅读0次

    介绍一个我个人关于python yield的一点小看法

    python代码中, 凡是带yield关键字的都被视为一个generator。代码可以从yield中断, 同时也可以从yield处传入值进去, 这样就有一点消费者的概念了。

    def avg():
        total = 0
        res = 0
        nums = 0
        try:
            while True:
                new_num = yield res
                nums += 1
                total += new_num
                res = total / nums
        except StopIteration:
            print("avg stop....")
    
    

    这段代码是计算平均值的, 怎么使用呢?

    a = avg() # 计算平均值的consumer
    next(a) # run to the yield
    a.send(1) # return 1.0
    a.send(2) # return 1.5
    a.close()
    

    是不是有点消费者的感觉了。a是消费者, 当需要计算的时候,a.send(value), 是不是很方便呢。
    还有些小问题, 每一次我们想用这样的生成器的时候,都需要调用next(a)来启动,有点不方便,写个装饰器来修改一下。

    from functools import wraps
    def gen(func):
        @wraps(func)
        def wrapper(*argv, **kw):
            print("**wrap a generator to next yield")
            temp = func(*argv, **kw)
            next(temp)
            return temp
        return wrapper
    #########################
    @gen
    def avg():
    ......
    
    

    这样, 不用再写next了, 有点更像消费者了。

    相关文章

      网友评论

          本文标题:python yield 用法

          本文链接:https://www.haomeiwen.com/subject/gxiirttx.html