What scenarios would cause coroutines to be a better (i.e. more robust, easier to modify) answer than simple mutable objects?
For example, in Fluent Python, the following running average example is used to show what coroutines can do:
def averager(): total = 0.0 count = 0 average = None while True: term = yield average total += term count += 1 average = total / count
Why not just use a class-based object?
class Averager: def __init__(self,): self.total = 0.0 self.count = 0 self.average = None def send(self, term): self.total += term self.count += 1 self.average = self.total / self.count return self.average