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

Posted 648071634com

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器的进阶,关于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)

 

以上是关于生成器的进阶,关于send()方法的使用,以及为生成器添加装饰器的主要内容,如果未能解决你的问题,请参考以下文章

生成器函数的进阶和表达式and各种推导式

生成器函数进阶

我的C语言学习进阶之旅关于C/C++内存对齐读取文件产生的问题以及解决方法

我的Android进阶之旅关于Android使用bindService()绑定服务,onServiceConnected()方法是异步回调的问题以及借鉴NotificationManager来优化(代

我的Android进阶之旅关于Android使用bindService()绑定服务,onServiceConnected()方法是异步回调的问题以及借鉴NotificationManager来优化(代

面向对象进阶篇