• 生成器的进阶,关于send()方法的使用,以及为生成器添加装饰器


    def generator():

      print(12)

      num=yield 12

      print("**",num)

      print(52)

      yield 445

    g=generator()#把这个函数传给g,变成一个生成器

    ret=g.__next__()

    print(ret)

    ret=g.send("hello")#它的效果和__next__相同,在读取下一步内容的同时,给上个yield传个值

    print(ret)

    #send()使用的注意事项

      1.第一次使用生成器的时候,必须要用__next__传值

      2.最后一个yield不能获取外部的值

    #获取移动平均值

    def average():

      sum=0

      count=0

      avg=0

      while 1:

        num=yield avg

        num=yield  

        sum+=num

        count+=1

        avg=sum/count

    g=average()

    g.__next__()

    ret=g.send(10)

    ret=g.send(20)

    print(ret)

    def init(f):

      def inner(*avgs,**kavgs):

        g=f(*avgs,**kavgs)

        g.__next__()

      return inner

    @init

    def generator():

      avg=0

      sum=0

      count=0

      while 1:

        num=yield avg

        sum+=num

        count+=1

        avg=sum/count

    avg_g=generator()

    avg_g.__next__()

    ret=avg_g.send(10)

    ret=avg_g.send(30)

    ret=avg_g.send(20)

    print(ret)

  • 相关阅读:
    ? ?? 类?
    类 建索引
    访问局域网计算机文件
    JS 在元素后面添加新的元素
    js 网页加载完毕,执行js函数
    设置快捷键(3种方式)
    winform设置textbox设置水印
    ADO.NET 学生管理
    C#整理 条件语句
    ADO.NET 数据访问类查询、属性扩展
  • 原文地址:https://www.cnblogs.com/648071634com/p/11663110.html
Copyright © 2020-2023  润新知