美文网首页
python3迭代器

python3迭代器

作者: abrila | 来源:发表于2019-02-26 14:06 被阅读0次

    可迭代对象:实现了__iter__()方法的对象,它的__iter__()方法可以返回一个迭代器对象
    迭代器对象:实现了__next__()方法的对象,它的__iter__()方法可以返回迭代器对象本身
    比如列表就是一个可迭代对象

    from collections import Iterable, Iterator
    l = [1,2,3,4,5]
    print(type(l))
    print(isinstance(l,Iterable))
    print(isinstance(l,Iterator))
    print(dir(l))
    

    结果是列表是一个可迭代的对象,它有__iter__()方法,但是它不是一个迭代器

    <class 'list'>
    True
    False
    ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
    
    

    __iter__()可以返回一个迭代器对象,这里列表调用这个方法,返回一个迭代器对象

    from collections import Iterable, Iterator
    l = [1,2,3,4,5]
    l = l.__iter__()
    print(isinstance(l,Iterator))
    print(dir(l))
    print(next(l))
    print(l.__next__())
    

    迭代器有__next__()方法

    True
    ['__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__length_hint__', '__lt__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__']
    1
    2
    

    for循环遍历迭代器实际上是通过调用迭代器__next__方法实现的
    一个对象只要实现了__iter__()__next__()方法就是一个迭代器

    相关文章

      网友评论

          本文标题:python3迭代器

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