在一个程序中,如果我们接下来需要很多个值,第一种方案:先建一个列表,把这些值存起来,什么时候用,什么时候取。第二种方案:不要先存这些值的列表,而是先存储怎么生成那些值的方式。第一种方案会占用大容量的空间,所以第二种方案更好。
所以迭代器的优点就更明显了:比返回列表的方式占用极小的空间。
下面用两种方案实现斐波那契数列:
nums = list()
a = 0
b = 1
i = 0
while i < 10:
nums.append(a)
a, b = b, a + b
i += 1
for num in nums:
print(num)
class Fibonacci(object):
def __init__(self, all_num):
self.all_num = all_num
self.current_num = 0
self.a = 0
self.b = 1
def __iter__(self):
'''如果想让一个对象成为可迭代的对象,即可以使用 for 循环,那么就必须使用 __iter__ 方法'''
return self # 返回自己, 调用 __next__ 方法
def __next__(self):
if self.current_num < self.all_num:
ret = self.a
self.a, self.b = self.b, self.a + self.b
self.current_num += 1
return ret
else:
raise StopIteration
fib = Fibonacci(10)
for num in fib:
print(num)