Am 04.06.2011 20:27 schrieb TommyVee:
I'm using the SimPy package to run simulations. Anyone who's used this
package knows that the way it simulates process concurrency is through
the clever use of yield statements. Some of the code in my programs is
very complex and contains several repeating sequences of yield
statements. I want to combine these sequences into common functions.

Which are then generators.

> The problem of course, is that once a yield gets put into a function,
> the function is now a generator and its behavior changes.

Isn't your "main" function a generator as well?


Is there  any elegant way to do this? I suppose I can do things like
> ping-pong yield statements, but that solutions seems even uglier than
> having a very flat, single main routine with repeating sequences.

I'm not sure if I got it right, but I think you could emulate this "yield from" with a decorator:

def subgen1(): yield 1; yield 2;
def subgen2(): yield 1; yield 2;

Instead of doing now

def allgen():
    for i in subgen1(): yield i
    for i in subgen2(): yield i

you as well could do:

def yield_from(f):
    def wrapper(*a, **k):
        for sub in f(*a, **k):
            for i in sub:
                yield i
    return wrapper

@yield_from
def allgen():
    yield subgen1()
    yield subgen2()

(Untested.)


Thomas
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to