creating generators from function
Steven Bethard
steven.bethard at gmail.com
Wed Dec 8 04:47:38 EST 2004
Simon Wittber wrote:
> I use a coroutine/generator framework for simulating concurrent processes.
>
> To do this, I write all my functions using the general form:
>
> while True:
> do stuff
> yield None
>
> To make these generator functions compatible with a standard thread
> interface, I attempted to write a decorator which converts a standard
> function into a generator function (code attached below).
[snip]
> @generatorize
> def f():
> while True:
> return 1
>
> def g():
> while True:
> yield 1
>
> print g()
> print f()
I'm a little confused as to what you're trying to do here. The f()
function, in particular, doesn't make much sense -- the 'while True'
doesn't do anything since the 'return 1' is executed on the first time
through the loop. If you really do want to turn your functions into
generators of the form:
while True:
do stuff
yield None
why can't you just do:
>>> def generatorize(f):
... def new_f(*args, **kwds):
... while True:
... f(*args, **kwds)
... yield None
... return new_f
...
>>> @generatorize
... def f():
... return 1
...
>>> i = f()
>>> print i.next()
None
>>> print i.next()
None
Basically, I've assumed that 'do stuff' is the function that's being
wrapped.
Steve
More information about the Python-list
mailing list