当前的生成器值可以与之前生成的值交互吗?

Can a current generator value interact with the value generated before it?

我知道 yield 会即时生成一个值,根据我的理解,这意味着它不会将该值保存在内存中,因此当前值应该'无法与最后的值进行交互。

但我只是想确定情况是否如此,有人可以确认这是否可能吗?

我将使用 5 作为 number 中的值。

没有生成器的示例:

def factorial(number):
    result = number
    if number <= 1:
        return 1
    else:
        for x in reversed(range(1, number)): # (4,1) reversed
            result *= x # 5*4*3*2*1
    return result # returns 120

是否可以使用 yield 函数做同样的事情?怎么样?

谢谢

生成器可以是有状态的:

def fibs():
    a, b = 1, 1
    while True:
        yield b
        a, b = b, a + b

g = fibs()

for i in range(10):
    print next(g)

这里的状态在局部变量中。当生成器生成的迭代器处于活动状态时,它们将保持活动状态。

编辑。我瞎了这是阶乘

def factorials():
    i = 1
    a = 1
    while True:
        yield a
        i+=1
        a*=i

或者,如果您需要一个函数而不是它们的流,那么这里有一个衬里

print reduce(lambda a, b: a*b, (range(1, 10+1)))