send()和next()
#send
send 获取下一个值的效果和 next 基本一致,走到第一个yield结束 (作用范围一模一样)
send 在获取下一个值的时候会给上一个 yield 的位置传递一个数据
#第一次使用生成器函数,不能用要用 next 获取下一个值
#函数中的最后一个 yield 不能接受外部的值
yield from
计算平均值
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
def wrapper(func): def inner(*args,**kwargs): ret = func(*args,**kwargs) ret.__next__() return ret return inner @wrapper def average(): sum = 0 count = 0 avg = 0 while True: num = yield avg sum += num count += 1 avg = sum/count avg_g = average() while 1: number = int(input('input a number:')) ret = avg_g.send(number) print(ret)