下面我们用协程来实现平均值的计算,区别之前的闭包。

这个无限循环表明,只要调用方不断把值发给这个协程,它就会一直接收值,然后生成 结果。仅当调用方在协程上调用 .close() 方法,或者没有对协程的引用而被垃圾回收 程序回收时,这个协程才会终止。
这里的 yield 表达式用于暂停执行协程,把结果发给调用方;还用于接收调用方后面发 给协程的值,恢复无限循环。
使用协程的好处是,total 和 count 声明为局部变量即可,无需使用实例属性或闭包在多 次调用之间保持上下文。

1、创建协程对象。
2、 调用 next 函数,预激协程。
3、计算移动平均值:多次调用 .send(...) 方法,产出当前的平均值。
调用 next(coro_avg) 函数后,协程会向前执行到 yield 表 达式,产出 average 变量的初始值——None,因此不会出现在控制台中。此时,协程在 yield 表达式处暂停,等到调用方发送值。coro_avg.send(10) 那一行发送一个值,激活 协程,把发送的值赋给 term,并更新 total、count 和 average 三个变量的值,然后开始 while 循环的下一次迭代,产出 average 变量的值,等待下一次为 term 变量赋值。
本文介绍如何使用协程实现平均值的动态计算。通过创建协程对象,预激协程并调用.send()方法,可以持续接收输入值并计算移动平均值。协程的使用避免了闭包和实例属性的复杂性。
837

被折叠的 条评论
为什么被折叠?



