我正在使用一些生成器在Python中构建处理管道。但是,我注意到经过几个处理步骤后,我需要一个先前计算过的值(在之前的生成器中)。例如:
from itertools import izip, tee
# first generator
def gen():
for i in range(10):
yield i
# second generator that uses gen's values
def gen2(x):
for i in x:
yield i**2
# third generator that requires values from gen and gen2
def gen3(iter_, iter_2):
for iter1, iter2 in izip(iter_, iter_2):
yield iter1*iter2
我会像这样使用它:
x, x_2 = tee(gen())
y = gen2(x)
z = gen3(x_2, y)
next(z)
但是有几个问题。
我需要创建gen
值的副本,因为第二个生成器会消耗gen3
也需要使用的值。
尝试获取管道中的先前值有点尴尬。它似乎不是发电机适合的东西。
我所拥有的管道只需要一次以前的值,所以我在这种情况下使用OOP有点犹豫。在大多数步骤中我不能真正使用列表而不是生成器,因为内存消耗太高。解决这个问题的好方法是什么?