迭代器
为什么要用迭代器
为什么不使用列表而使用迭代器,列表可以获取列表长度,然后使用变量i对列表索引进行循环,而且容器理解,也可以获取集合的所有元素。
没错,使用列表的代码是容易理解也很好操作,但这是要付出代价的。列表之所以可以用索引来快速定位其中的任何一个元素,是因为列表是一下子将所有的数据都装在在内存中,
而且是一块连续存在的空间。当数量比较小时,实现比较容易;当数据量大时,会非常消耗内存资源。而迭代就不同,迭代是读取多少元素,就讲多少元素装载到内存中。
实例:
在这个例子中定义了一个迭代器类(Fibonacci),用于无限迭代斐波那数列。
class Fibonacci:
# 在构造方法中定义两个变量a和b,用来表示斐波那数列的最开始的两个值
def __init__(self):
self.a=0
self.b=1
def __next__(self):
# self.a就是当前要迭代的值
result=self.a
#计算斐波那数列的下一个值,并将a变成原来的b,降b变成下一个值
self.a,self.b=self.b,self.a+self.b
# 返回当前迭代的值
return result
#该方法必须返回迭代器
def __iter__(self):
return self
fibs=Fibonacci()
#对斐波那数列进行迭代
for fib in fibs:
print(fib,end=" ")
#迭代的值不能超过500
if fib > 500:
break
E:\python\python.exe E:/progect/untitled1/untitled1/urls.py
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610