generator object or 'send' method?
andrew at acooke.org
Mon Feb 9 15:07:41 EST 2009
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)
c = next(mygen)
And in the generator:
yield # discarded by the reset function
In that case, I needed an extra "yield" that did nothing.
Aaron Brady wrote:
> 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'
> Thanks sincerely as always.
More information about the Python-list