题目:通过使用生成器来做到对每输入一个值就计算一次平均数。
def init(func): def inner(*args,**kwargs): g = func(*args,**kwargs) g.__next__() return g return inner @init def avgrage(): sum = 0 count = 0 avg = 0 while True: num = yield avg sum += num count += 1 avg = sum/count avg_g = avgrage() ret = avg_g.send(10) print(ret) ret = avg_g.send(76) print(ret)
通过给生成器装上一个装饰器,可以在对进行输入的时候少写一行代码。
如果不加装饰器
def avgrage(): sum = 0 count = 0 avg = 0 while True: num = yield avg sum += num count += 1 avg = sum/count avg_g = avgrage() avg_g.__next__() ret = avg_g.send(10) print(ret) ret = avg_g.send(76) print(ret)
对比而言,加了装饰器可以在输入的时候少写一行代码、
avg.__next__()
************
(⊙﹏⊙),虽然对程序猿来说好像代码更多了。
但是在用户角度来说,更显方便。
输出结果