如何使用生成器获取管道中的先前值?

时间:2015-01-21 20:43:58

标签: python iterator generator

我正在使用一些生成器在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)

但是有几个问题。

  1. 我需要创建gen值的副本,因为第二个生成器会消耗gen3也需要使用的值。

  2. 尝试获取管道中的先前值有点尴尬。它似乎不是发电机适合的东西。

  3. 我所拥有的管道只需要一次以前的值,所以我在这种情况下使用OOP有点犹豫。在大多数步骤中我不能真正使用列表而不是生成器,因为内存消耗太高。解决这个问题的好方法是什么?

0 个答案:

没有答案