Python 迭代器

来源:互联网 发布:中科院物理所考研知乎 编辑:程序博客网 时间:2024/05/22 00:40

迭代器规则:

迭代的意思是重复做一些事情很多次,就像在循环中那样。一般只在for循环中对序列和字典进行迭代,但实际也可以对其它对象进行迭代,只要对象实现了__iter__方法即可。

__iter__方法会返回一个迭代器(iterator),所谓的迭代器就是具有__next__方法(这个方法在调用时不需要任何参数)的对象。在调用next方法时,迭代器就会返回它的下一个值,直到返回一个StopIteration异常。

一个实现了__iter__方法的对象是可迭代的,一个实现了__next__方法的对象则是迭代器。

示例1: 输出100以内的斐波那契数列

class Fib100:    def __init__(self):        self._1 , self._2 = 0,1    def __iter__(self):        return self    def __next__(self):        self._1 , self._2 = self._2, self._1 + self._2        if self._1 > 100:            raise StopIteration()        return self._1if __name__ == '__main__':    for i in Fib100():        print(i)

迭代器的调用顺序:



示例2: 迭代查找1000以内的数素

class Prime1000(object):    def __init__(self):        self.Prime,self.Len = self.FindAllPrime(1000)        self.count = -1        def __iter__(self):        print('call __iter__')        return self    def __next__(self):        self.count+=1        if self.count>=self.Len:            raise StopIteration()        return self.Prime[self.count]                    def FindAllPrime(self,n):        result = list(range(n))        output = []        cnt    = 0        upper  = round(pow(n,0.5))+1        for i in range(2,upper):            j = i * i            while(j<n):                result[j] = 0                j += i        result[1] = 0        for i in range(n):            if result[i]!=0:                cnt+=1                output.append(i)        return output,cntif __name__ == '__main__':    for i in Prime1000():        print(i)




















原创粉丝点击