通过一系列生成器

时间:2016-07-13 22:04:34

标签: python python-2.7 generator

使用案例

我有一个有序生成器的变量列表,我试图链接在一起。通过链在一起我的意思是我正在接受一些输入并从该输入创建generator_1。然后我从item_1获取generator_1并使用它来创建generator_2

这一直持续到我到达列表中的最后一个生成器;在这一点上,我耗尽了那台发电机。

实施例

我已经编写了这段代码,它读取它似乎做了我想要的但却无法正常运行:

def run(x):
    functions = [one_produces_three, one_produces_one]

    def recurse(idx, message):
        if idx == len(functions) - 1:
            yield message
        else:
            next_gen = functions[idx + 1](message)
            for next_message in next_gen:
                recurse(idx + 1, next_message)

    return recurse(-1, x)


def one_produces_three(one_input):
    for x in xrange(0, 3):
        print "one produces three %s %s" % (one_input, x)
        yield one_input + x


def one_produces_one(one_input):
    print "one produces one %s" % one_input
    yield one_input


if __name__ == "__main__":
    for r in run(1):
        print r

当我使用调试器逐步执行此操作时,问题似乎在第10行:recurse(idx + 1, next_message)。由于某种原因,这是一个无操作,递归调用永远不会发生,并且永远不会调用one_produces_one方法。

当我运行代码时很明显,因为我只得到输出:

one produces three 1 0
one produces three 1 1
one produces three 1 2

我期望的输出是:

one produces three 1 0
one produces one 1
1
one produces three 1 1
one produces one 2
2
one produces three 1 2
one produces one 3
3

为什么我的递归方法调用没有被调用?

0 个答案:

没有答案