python的生成器(斐波拉契数列(Fibonacci))
代码:
函数版本:
#斐波拉契数列(Fibonacci) def fib(max): n=0 a,b=0,1 while n < max: a,b = b,a+b n = n+1 return "done"
生成器版本:
def fib(max): n=0 a,b=0,1 while n < max: yield b a,b = b,a+b n = n+1 return "done"
测试结果:
>>> fib(8) <generator object fib at 0x00000000031C1728> >>> next(fib(8)) 1 >>> next(fib(8)) 1 >>> next(fib(8)) 1 >>> next(fib(8)) 1 >>> f =fib(8) >>> next(f) 1 >>> next(f) 1 >>> next(f) 2 >>> next(f) 3 >>> next(f) 5
解释:next(fib(8))每一次都相当于初始化后的第一次next,所以都是返回1,而f=fib(8),next(f)就是每一次往下执行。
小结:
测试时发现的,记录一下。