python2.7 使用生成器方式实现斐波那契数列

使用生成器方式实现斐波那契数列

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

猜你喜欢

转载自www.cnblogs.com/gaozhidao/p/13161930.html