29 lines
528 B
Python
29 lines
528 B
Python
"""
|
|
A coroutine to compute a running average
|
|
|
|
# tag::CORO_AVERAGER_TEST[]
|
|
>>> coro_avg = averager() # <1>
|
|
>>> next(coro_avg) # <2>
|
|
>>> coro_avg.send(10) # <3>
|
|
10.0
|
|
>>> coro_avg.send(30)
|
|
20.0
|
|
>>> coro_avg.send(5)
|
|
15.0
|
|
|
|
# end::CORO_AVERAGER_TEST[]
|
|
|
|
"""
|
|
|
|
# tag::CORO_AVERAGER[]
|
|
def averager():
|
|
total = 0.0
|
|
count = 0
|
|
average = None
|
|
while True: # <1>
|
|
term = yield average # <2>
|
|
total += term
|
|
count += 1
|
|
average = total/count
|
|
# end::CORO_AVERAGER[]
|