Auth: 王海飞
Data:2018-06-15
Email:[email protected]
代码:
import sys
def simple_coroutine(a):
print('-> start')
b = yield a
print('-> recived', a, b)
c = yield a + b
print('-> recived', a, b, c)
sc = simple_coroutine(5)
next(sc)
try:
sc.send(6) # 5, 6
sc.send(7) # 5, 6, 7
except StopIteration as e:
sys.exit()
def averager():
total = 0.0
count = 0
avg = None
while True:
num = yield avg
total += num
count += 1
avg = total/count
# run
ag = averager()
# 预激协程
print(next(ag)) # None
print(ag.send(10)) # 10
print(ag.send(20)) # 15
- 调用 next(ag) 函数后,协程会向前执行到 yield 表达式,产出 average 变量的初始值——None。
- 此时,协程在 yield 表达式处暂停。
- 使用 send() 激活协程,把发送的值赋给 num,并计算出 avg 的值。
- 使用 print 打印出 yield 返回的数据。