我知道收益会即时生成一个值,据我所知,这意味着它不会将值保留在内存中,因此当前值不应该能够交互最后的值。
但是我只想确定是这样,有人可以确认是否可行吗?
我将使用 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函数来做同样的事情?怎么样?
谢谢
答案 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)))