迭代器

迭代器

为什么要用迭代器

为什么不使用列表而使用迭代器,列表可以获取列表长度,然后使用变量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 

 

posted @ 2019-02-16 12:54  effortsing  阅读(171)  评论(0编辑  收藏  举报