假设我有一个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)运行f1
或f2
会导致错误。相反,运行f3
效率低下。我知道可以将每个递归重新构造为for循环。我该如何在这里使用pythonic方式?