zoukankan      html  css  js  c++  java
  • 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))
     
  • 相关阅读:
    ZOJ-3230-Solving the Problems
    zoj-3410-Layton's Escape
    cin输入超过文本末尾
    sizeof('a')
    WPF TranslatePoint/TransformToVisual 总返回零
    Lock-free multi-threading
    c++0X 用字符串调用函数
    Vim 的c++语法补齐
    Reentrancy VS Thread safe
    内存屏障
  • 原文地址:https://www.cnblogs.com/wzc27229/p/11009089.html
Copyright © 2011-2022 走看看