将yield包含在另一个函数中

时间:2018-11-09 10:12:57

标签: python iterator generator yield coroutine

我有两个函数,generatorA()调用其中的generatorB()。我想在调用generatorB()时获得全部收益,但我只会得到0,1,2 如何获得0,1,2,3,4,5

generatorA()是回叫功能。所以我不能说何时调用。

def generatorA():
    mylist = range(4,6)
    for i in mylist:
        yield i


def generatorB():
    generatorA()

    mylist = range(3)
    for i in mylist:
        yield i

for i in generatorB():
    print(i)

2 个答案:

答案 0 :(得分:3)

使用yield from

def generatorA():
    return range(4,6)  

def generatorB():
    mylist = range(3)
    for i in mylist:
        yield i

    yield from generatorA()

for i in generatorB():
    print(i)

输出

0
1
2
4
5

答案 1 :(得分:3)

使用yield from,您可以通过可迭代的拆包进一步缩短操作时间。

def generatorB():
    yield from (*range(3), *generatorA())

您可以对generatorA做同样的事情:

def generatorA():
    yield from range(4,6)

(...但是我认为generatorA是更复杂事物的替代。)

>>> list(create())
[0, 1, 2, 4, 5]