使用生成器方式实现斐波那契数列
1 生成器 语法
# 请注意下面的代码创建的不是一个列表而是一个生成器对象
# 通过生成器可以获取到数据但它不占用额外的空间存储数据
# 每次需要数据的时候就通过内部的运算得到数据(需要花费额外的时间)
f = (x ** 2 for x in range(1, 1000))
print(sys.getsizeof(f)) # 相比生成式生成器不占用存储数据的空间
print(f)
for val in f:
print(val)
除了上面提到的生成器语法,Python中还有另外一种定义生成器的方式,就是通过yield
关键字将一个普通函数改造成生成器函数
2 生成器方式实现斐波那契数列
斐波那契数列又称费氏数列,是数学家Leonardoda Fibonacci发现的。指的是0、1、1、2、3、5、8、13、21、34、······这样的数列。即从0和1开始,第n项等于第n-1项与n-2项之和。需要注意的是0是第0项,而不是第一项。
def fib(n):
a, b = 0, 1
for _ in range(n):
a, b = b, a + b
yield a
"""
# 或是使用如下的赋值方式
def fib(n):
a, b = 0, 1
for _ in range(n):
n = a + b
a = b
b = n
yield a
"""
def main():
for val in fib(20):
print(val)
if __name__ == '__main__':
main()