How to return a generator from another function

Viewed 5760

I have a generator function which I want to call from another function and return the generator obtained. I can see two approaches here -

Note that the below functions are simple dummy functions to illustrate the purpose. Please don't come up with better ways to implement those functions itself.

Method 1
def fun_a(n):
    for i in range(n):
        yield i+10

def fun_b(n):
    if n < 0: 
        yield None
        return
    yield fun_a(n)

and use it as list(list(fun_b(10))[0]) to get [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

Method 2
def fun_b(n):
    if n < 0: 
        yield None
        return
    for i in fun_a(n):
        yield i

Then list(fun_b(10)) can give me [10, 11, 12, 13, 14, 15, 16, 17, 18, 19].

While method 1 seems ok'ish, I don't want to return a list of list because in other cases I am returning a list and I don't want to mess up my code. Method 2 is just inefficient.

What would be a really good approach to deal with this situation?

1 Answers
Related