我有一个有序生成器的变量列表,我试图链接在一起。通过链在一起我的意思是我正在接受一些输入并从该输入创建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
为什么我的递归方法调用没有被调用?