• day14_生成器进阶


    1.send使用:

    def generator():
        print("123")
        num = yield 1
        print("---"+num)
        print("456")
        yield 2
        print("987")
    g = generator()
    print(g.__next__())  #next遇到yield停止,后send赋值于num
    print(g.send("hello"))

    结果:

    123
    1
    ---hello
    456
    2

    send 获取下一个值的效果和next基本一致

    只是在获取下一个值的时候,给上一yield的位置传递一个数据
    使用send的注意事项
       第一次使用生成器的时候 是用next获取下一个值
      最后一个yield不能接受外部的值

    #计算移动平均值
        
    def averager():
        total = 0.0
        count = 0
        average = None
        while True:
            term = yield average
            total += term
            count += 1
            average = total/count
    
    
    g_avg = averager()
    next(g_avg) #
    print(g_avg.send(10))
    print(g_avg.send(30))
    print(g_avg.send(5))
    
       #              averager    total   count   term
       # next()       None        0       1       None
       # send(10)     10          10      2       10
       # send(30)     30          40      3       20
       # send(5)      5           45      4       5
    ---------------------------------------------------------
    def init(func):  #在调用被装饰生成器函数的时候首先用next激活生成器
        def inner(*args,**kwargs):
            g = func(*args,**kwargs)
            next(g)
            return g
        return inner
    
    @init
    def averager():
        total = 0.0
        count = 0
        average = None
        while True:
            term = yield average
            total += term
            count += 1
            average = total/count
    
    
    g_avg = averager()
    # next(g_avg)   在装饰器中执行了next方法
    print(g_avg.send(10))
    print(g_avg.send(30))
    print(g_avg.send(5))
     
  • 相关阅读:
    在禅道中实现WORD等OFFICE文档转换为PDF进行在线浏览
    慎用 supportedRuntime
    定时开关机方案
    谨慎使用Sql server data tool 架构比对排除
    生成数据字典
    Cordova开发速记
    SQLSERVER 2012 收缩日志
    QService 服务容器
    使用用户自定义类型 CLR UDT
    使用DOTNETZIP过滤并压缩相对目录
  • 原文地址:https://www.cnblogs.com/wzc27229/p/11009089.html
Copyright © 2020-2023  润新知