我正在使用一些生成器用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有点犹豫。在大多数步骤中,我不能用列表代替生成器,因为内存消耗太大了。解决这个问题的好方法是什么?你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐