If I were experimenting with Python to see just how far I could push coroutines at the moment, I would use .send() and look at how I could factor things into a small library (containing, for example, your trap-and-response secondary generator).
But if this was paid work, I would write a class with a __next__ method and do things explicitly. In answer to your PS, via a roundabout route: I've done something similar recently by using .throw() to raise an exception in the body of the generator. This was done with a reset() function. So, for example: mygen = ... a = next(mygen) b = next(mygen) reset(mygen) c = next(mygen) And in the generator: while True: try: ... yield ... catch ResetException: yield # discarded by the reset function And finally: def reset(gen): gen.throw(ResetException()) In that case, I needed an extra "yield" that did nothing. Andrew Aaron Brady wrote: > Hello, > > I am writing a generator to return a sequence of numbers with some > variation. The parameters of the variation can be changed by the > caller, even after the generator is started. My question is, is it > better to wrap the generator in an object, so that the parameters can > be changed just by an attribute access? Or keep the generator clear, > and modify parameters with a 'send' call? > > P.S. It would receive the 'send' from a different point in control > flow than its usual 'next'. Should it repeat a value if it receives a > 'send'? Or should I wrap it in a secondary 'trap_send_and_repeat' > generator? > > Thanks sincerely as always. > -- > http://mail.python.org/mailman/listinfo/python-list > > -- http://mail.python.org/mailman/listinfo/python-list