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

2024-06-28 15:16:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用一些生成器用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. 尝试在管道中获取以前的值有点尴尬。这似乎不是发电机适合的地方。

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


Tags: infromforthat管道def步骤generator