生成器的扩展 ------ send() 方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器的扩展 ------ send() 方法相关的知识,希望对你有一定的参考价值。

生成器的 send() 方法

g.send (‘A‘)


1 send 和 next 的工作的起止位置是完全相同的

2 send 可以把一个值作为 信号量 传递到函数中去

3 并且 在生成器开始 只能先使用next

4 send(‘a‘)改变上一次yield的内容 可以用yield 返回同一个改变的值来返回

#  def fun():
#     print(1)
#     yield 2  #888
#     print(3)
#     value=yield 4    #value---None
#     print(6)
#     yield value
#
# g=fun()
# print(g.__next__())
# print(g.send(888))
# print(g.__next__())

 

  ---------------------------生成器 预激 函数-------------------------------

def wrapper(func):
    def inner(*args,**kwargs):
        re=func()
        re.__next__()
        return re
    return inner

@wrapper
def average_fun():
    total=0
    count=0
    average=0
    while True:
        value=yield average
        total+=value
        count+=1
        average=total/count

g=average_fun()
print(g.send(30))
print(g.send(20))
print(g.send(20))

 

以上是关于生成器的扩展 ------ send() 方法的主要内容,如果未能解决你的问题,请参考以下文章

PYTHON学习0038:函数---生成器send方法---2019-7-2

python基础 生成器send方法 迭代器

Python生成器next方法和send方法区别

Python生成器next方法和send方法区别

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

生成器send的用法案例