6

別の関数から呼び出して、取得したジェネレーターを返したいジェネレーター関数があります。ここで2つのアプローチを見ることができます-

以下の関数は、目的を説明するための単純なダミー関数であることに注意してください。これらの機能自体を実装するためのより良い方法を考え出さないでください。

方法 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)

取得するように使用list(list(fun_b(10))[0])します[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

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

その後list(fun_b(10))、私を与えることができます[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

方法 1 は問題ないように見えますが、リストのリストを返したくありません。それ以外の場合はリストを返し、コードを台無しにしたくないからです。方法 2 は非効率的です。

この状況に対処するための本当に良いアプローチは何でしょうか?

4

1 に答える 1