有效地输送许多发电机而没有递归错误

问题描述 投票:0回答:1

假设我有一个Python方法将大量生成器链接在一起。在这里,链接确实[[not指的是一个接一个地返回所有迭代器的结果,而是将一个迭代器的输出用作另一个生成器的输入。

[我如何制定方法,使其(1)不容易出现堆栈溢出,并且(2)仍然有效,即,仅要求一个值时就不需要评估完整的生成器。

具有将chain生成器链接n次的3种不同实现的示例:

from itertools import chain from functools import reduce mygenerator = chain def f1(n): result = [] for i in range(n): result = mygenerator(result, [1]) return result def f2(n): return reduce(lambda x, y: mygenerator(x, [1]), chain([[1]], range(n-1))) def f3(n): result = [] for i in range(n): result = list(mygenerator(result, [1])) return result

使用大参数(例如100000)运行f1f2会导致错误。相反,运行f3效率低下。

我知道可以将每个递归重新构造为for循环。我该如何在这里使用pythonic方式?

python generator chaining
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.