2.分别用生成器和迭代器生成斐波那契
示例 1:
输出: 1 1 2 3 5 8 13
斐波那契数列(Fibonacci sequence)是一个数列,其中每个数字是前两个数字的和。
数列的前两个数字通常定义为0和1。从第三个数字开始,每个数字都是前两个数字的和。
数列的前几个数字如下:
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, ...
生成器(Generator)和迭代器(Iterator)是Python中用于处理可迭代对象的概念。
生成器是一种特殊类型的函数,可以通过yield语句来定义。它可以按需生成(yield)一个值,
并且在生成值后函数的状态被冻结,然后可以继续生成下一个值。生成器可以被迭代,
每次迭代时都会执行生成器函数的代码,生成一个新的值。生成器的特点是惰性计算,
只在需要时生成值,可以节省内存空间,并且适用于处理大量数据或无限序列的情况。
迭代器是一种对象,它实现了迭代器协议(Iterator Protocol)。
迭代器通过定义__iter__()和__next__()方法来支持迭代操作。
__iter__()方法返回迭代器对象本身,__next__()方法返回迭代的下一个值。
迭代器的特点是一次性计算并返回一个值,每次迭代时都返回下一个值,
直到没有更多的值可迭代。迭代器可以使用for循环来遍历可迭代对象,
也可以使用内置函数next()手动获取下一个值。
生成器是迭代器的一种实现方式,生成器函数可以用于创建迭代器对象。
生成器比显式定义迭代器更简洁,可以通过yield语句逐步生成值,
而不需要显式实现__iter__()和__next__()方法。
# 迭代器
class FibonacciIterator(object):
# 初始化
def __init__(self, limit):
self.limit = limit # 迭代次数限制
self.a, self.b = 0, 1 # 初始化数列的前两个值
self.count = 0 # 当前迭代次数记录
def __iter__(self):
return self # 返回迭代器本身作为迭代器
def __next__(self):
if self.count >= self.limit:
raise StopIteration # 超过上限,抛出异常
result = self.a # 当前斐波那契系数
self.a, self.b = self.b, self.a + self.b # 更新数列的值
self.count += 1 # 更新迭代次数
return result # 返回当前值
fit_iter = FibonacciIterator(10)
for num in fit_iter:
print(num)
print("------------------------------------------------")
# 生成器
def fibonacci_generator():
a, b = 0, 1
while True:
yield a # 返回当前的斐波那契数列的值
a, b = b, a + b # 更新数列的值
fib_gen = fibonacci_generator() # 创建斐波那契数列生成器对象
for i in range(10):
print(next(fib_gen)) # 调用next()函数获取下一个斐波那契数列的值并打印