example-code-2e/19-coroutine/coroaverager0.py
2021-02-14 20:58:46 -03:00

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[]