Python 迭代器案例:生成斐波那契数列

斐波那契数列

0,1,1,2,3,5,8,13,21,34 ….

前两个数相加,是第三个数的值

假如我需要一亿甚至十亿个数,如果使用range()生成,使用一个list() 储存。我们使用迭代器设置好生成的方法,什么使用我们什么时候生成,这样可以节约内存

斐波那契数列案例

需要一个列表存储生成的数字

maxCount = 100000 # 需要生成的个数
count = 0     # 记录生成的次数
startOne = 0  # 斐波那契数列第一个起始值
startTwo = 1  # 斐波那契数列第二个起始值
fibonacciList = list()
while count < maxCount:
    fibonacciList.append(startOne)
    startOne, startTwo = startTwo, startOne + startTwo
    count += 1

for num in fibonacciList:
    print(num)

加入迭代器

这个过程没有一个列表

class Fibonacci(object):
    def __init__(self, allNum):
        self.allNum = allNum # 需要生成的个数
        self.count = 0       # 记录生成的次数
        self.startOne = 0    # 斐波那契数列第一个起始值
        self.startTwo = 1    # 斐波那契数列第二个起始值

    def __iter__(self):
        return self

    def __next__(self):
        if self.count < self.allNum:
            # 记录斐波那契数
            fiboNum = self.startOne
            # 计算斐波那契数
            self.startOne , self.startTwo = self.startTwo , self.startOne + self.startTwo
            # 生成次数
            self.count += 1
            return fiboNum
        else:
            # 自定义一个异常 停止循环
            raise StopIteration

# 传入生成个数
fibo = Fibonacci(10000)

# 一个对象 可以使用 for 循环
for num in fibo:
    print(num)

Python 迭代器原理简述

发表评论 / Comment

用心评论~