@
1.需求
类比
早上起来吃包子
1.买1年的包子,放在冰箱,每天拿一个
2.每天下楼买一个包子吃
1会占据大量空间,2满足需求不占大量空间
所以迭代器奥比返回列表的方式节省大量内存空间
迭代器最终存储的是生成这个数据的方式而不是数据的结果
2.斐波那契数列演示
代码实现
class Fibonacci(object):
def __init__(self,all_num):
self.all_num = all_num
self.a = 0
self.b = 1
def __iter__(self):
"""如果想要一个对象称为一个 可以迭代的对象 可以使用for, 那么必须实现__iter__方法"""
return self
def __next__(self):
if self.all_num > 0:
self.a, self.b = self.b, self.a + self.b
self.all_num -=1
return self.a
else:
raise StopIteration
def Ite():
a = Fibonacci(10)
for i in a:
print(i)
def normal():
nums = list()
a= 0
b = 1
for i in range(10):
nums.append(a)
a,b = b,a+b
for i in nums:
print(i)
if __name__ == '__main__':
# normal()
Ite()
其中Ite方法为迭代器实现
normal方法为普通实现
3.并不是只有for循环能接收可迭代数据类型,list,tuple也可以
l = list(Fibonacci(15))
tp = tuple(Fibonacci(6))
稍微注意下就行