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

时间:2019-02-08 01:05:23

标签: python generator yield

我知道收益会即时生成一个值,据我所知,这意味着它不会将值保留在内存中,因此当前值不应该能够交互最后的值。

但是我只想确定是这样,有人可以确认是否可行吗?

我将使用 5 作为数字中的值。

没有生成器的示例:

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函数来做同样的事情?怎么样?

谢谢

1 个答案:

答案 0 :(得分:2)

发电机可以是有状态的:

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)))