kimber_kimber

导航

python-迭代器

定义:一个可以记住遍历位置的对象

1.判断是不是迭代器 和 迭代对象

 1 #判断是不是迭代对象
 2 from collections import Iterable
 3 def test_fun():
 4     a='123'
 5     b=[1,2,3]
 6     c=12
 7     print(isinstance(a,Iterable))
 8     print(isinstance(b,Iterable))
 9     print(isinstance(c, Iterable))
10 
11 if __name__=='__main__':
12     test_fun()

  运行结果:True,True,False

 1 from collections import Iterable,Iterator
 2 def test_fun():
 3     a='123'
 4     b=[1,2,3]
 5     c=12
 6     print(isinstance(a,Iterator))
 7     print(isinstance(b,Iterator))
 8     print(isinstance(c, Iterator))
 9 
10 if __name__=='__main__':
11     test_fun()

  运行结果 False,False,False

2.迭代器的两个方法 iter() 和next()

  iter() 用于创建迭代器

  next()用于访问迭代器中的下一个元素,一直取到没有了,那就会抛出”StopIteration” 异常  

from collections import Iterable,Iterator
def test_fun():
    a='123'
    i1=iter(a) #创建一个迭代器
    print(isinstance(i1,Iterator))
    for i in i1:  #使用for 循环去访问
        print(i,end=' ')
    print(next(i1))
    print(next(i1))
    print(next(i1))
    print(next(i1))

if __name__=='__main__':
    test_fun()

运行结果:

  True

  1 2 3 

  还抛出了一个异常 StopIteration    

3.编码一个迭代器类

class it:
    def __iter__(self):
        self.a=1
        return self
    def __next__(self):
        if self.a<=3:
            x=self.a
            self.a += 1
            return x
        else:
            raise StopIteration

if __name__=='__main__':
    myit=it()
    i=iter(myit)
    print(next(i))
    print(next(i))

4. 斐波那契数列

class it:
    def __iter__(self):
        self.a=0
        self.b=1
        self.count=1
        return self
    def __next__(self):
        self.a,self.b=self.b,self.count
        self.count = self.a+self.b
        if self.count <= 100:
            return self.count
        else:
            raise StopIteration

if __name__=='__main__':
    myit=it()
    i=iter(myit)
    while True:
        try:
            print(next(i),end=' ')
        except StopIteration:
            break

输出结果:2 3 5 8 13 21 34 55 89  

 

posted on 2021-03-03 16:41  kimber_kimber  阅读(47)  评论(0编辑  收藏  举报