zoukankan      html  css  js  c++  java
  • Python之路----生成器函数进阶

    def generator():
            print(123)
            yield 1
            print(456)
            yield 2
            
    g = generator()
    ret = g.__next__()
    print('***'ret)
    ret = g.send(None)  #send 效果和 next一样
    print('***'ret)
    next与send

    归纳:

    1.send 获取下一个值得效果和next基本一致
    2.只是在获取下一个值得时候,给上一个yield的位置传一个参数

    使用send的注意事项

    1.第一次使用生成器的时候,必须使用next获取一个值
    2.最后一个yield不能接受外部的值
    def average()
        sum = 0
        count = 0
        avg = 0
        while 1:
            num = yield avg
            sum += num
            count += 1
            avg = sum / count
    
    
    avg_g = average()
    avg_g.__next__()
    avg1 = avg_g.send(10)
    print(avg1)
    获取移动平均值:
    def init(func):
        def inner(*args, **kwargs):
            ret = func(*args, **kwargs)
            g.__next__()
            return g
    
        return inner
    
    @init
    def average():
        sum = 0
        count = 0
        avg = 0
        while 1:
            num = yield avg
            sum += num
            count += 1
            avg = sum / count
    
    g = average()
    avg1 = g.send(10)
    print(avg1)
    预激生成器的装饰器

    python3.X----->yield from

    def generator():
        a = '123'
        b = 'abc'
        for i in a:
            yield i
        for i in b:
            yield i
    
    
    g = generator()
    for i in g:
        print(i)
    原方法
    def generator():
        a = '123'
        b = 'abc'
        yield from a
        yield from b
    
    
    g = generator()
    for i in g:
        print(i)
    yield from方法:
  • 相关阅读:
    第一章 数据库基本操作
    Linux卸载jdk
    Jenkins Jboss的启动
    Jenkins启动脚本
    Linux SVN 创建项目
    测试工程师到底是干啥的?测试工程师转开发有多大希望?
    如何评审功能测试用例?
    Maven上传
    持续集成
    jquery获取所有checked的value
  • 原文地址:https://www.cnblogs.com/TheLand/p/8183927.html
Copyright © 2011-2022 走看看