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
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to