美文网首页
Python 迭代器

Python 迭代器

作者: 随心随缘不随便 | 来源:发表于2018-01-22 18:33 被阅读2次

    迭代器是访问集合元素的一种方式
    迭代器是一个可以记住遍历的位置的对象
    迭代器对象从集合的第一个元素开始访问,直到所有元素被访问完结束
    迭代器只能向前,不能后退

    1.接作用于 for 循环的数据类型有以下几种:

    • 一类是结合数据类型,如list、 tuple、 dictsetstr
    • 一类是 generator, 包括生成器和带 yiedgenerator function

    这些可以直接作用于 for 循环的对象称为可迭代对象:Iterable

    2.判断是否可以迭代
    可以使用 isinstance() 判断一个对象是否是 iterable 对象:

    In [10]: from collections import Iterable
    
    In [12]: isinstance('asd', Iterable)
    Out[12]: True
    
    In [13]: isinstance([], Iterable)
    Out[13]: True
    
    In [14]: isinstance({}, Iterable)
    Out[14]: True
    
    In [16]: isinstance((x for x in range(10)), Iterable)
    Out[16]: True
    

    3.可以被 next() 函数调用并不断返回下一个值的对象称为迭代器:Iterator

    In [4]: from collections import Iterator
    
    In [5]: isinstance((x for x in range(10)), Iterator)
    Out[5]: True
    
    In [6]: isinstance([],Iterator)
    Out[6]: False
    
    In [7]: isinstance({}, Iterator)
    Out[7]: False
    
    In [8]: isinstance('sfhj', Iterator)
    Out[8]: False
    
    In [9]: isinstance(345, Iterator)
    Out[9]: False
    
    In [10]: 
    

    4.Iter() 函数
    生成器都是 Iterator 对象,但 listdictstr 虽然是 Interable, 却不是 Iterator
    listdictstrIterable 变成Iterator 可以使用 inter()函数:

    In [17]: from collections import Iterator
    
    In [18]: isinstance(iter([]), Iterator)
    Out[18]: True
    
    In [19]: isinstance(iter({}), Iterator)
    Out[19]: True
    
    In [21]: isinstance(iter('fsd'), Iterator)
    Out[21]: True
    

    总结

    • 凡是可作用于 for 循环的对象都是 Iterable 类型
    • 凡是可作用于 next() 函数的对象都是 Iterator 类型
    • 集合数据类型如 listdictstrIterable 但不是 Iterator, 不过可以通过 iter() 函数获得一个 Iterator 对象

    相关文章

      网友评论

          本文标题:Python 迭代器

          本文链接:https://www.haomeiwen.com/subject/mwlraxtx.html