How to yield results from a nested generator function? How to yield results from a nested generator function? python python

How to yield results from a nested generator function?


You may have to use the new yield from, available since Python 3.3, known as “delegated generator”.

If I understood the question correctly, I came to the same issue, and found an answer elsewhere.

I wanted to do something like this:

def f():    def g():        do_something()        yield x        …        yield y    do_some_other_thing()    yield a    …    g()  # Was not working.    yield g()  # Was not what was expected neither; yielded None.yield b

I now use this instead:

yield from g()  # Now it works, it yields x and Y.

I got the answer from this page: Python 3: Using "yield from" in Generators - Part 1 (simeonvisser.com).


Can't believe I missed this; The answer is to simply return the generator function with suitable arguments applied:

import timedef GeneratorFunction(max_val):    for i in range(0,max_val):        time.sleep(1)        yield "String %d"%idef SmallGenerator():    return GeneratorFunction(3) # <-- note the use of return instead of yieldfor s in SmallGenerator():    print s


Came here looking for a different form of "nested yield" and finally found the hidden answer. Might not be the best but it works.

I was wanting to yield through a registry tree and here is the solution.

        def genKeys(key):            for value in key.values():                yield value            for subkey in key.subkeys():                print(subkey)                for x in genKeys(subkey): #this is the trick                    continue