美文网首页
9-1 自定义迭代器

9-1 自定义迭代器

作者: 正在努力ing | 来源:发表于2018-08-26 15:37 被阅读0次
    class User:
        # 定义可迭代对象
        def __init__(self,name):
            self.name = name
    
        def __iter__(self):
            return MyIterator(self.name)  #返回该可迭代对象的迭代器的实例
    
    from collections.abc import Iterable,Iterator
    
    class MyIterator(object):
        #定义迭代器 , 继承Iterator就不要再去实现__iter__
        def __init__(self,name):
            self.index = 0
            self.iter_name = name
    
        def __iter__(self):
            return self         # 返回该对象的迭代器类的实例;因为自己就是迭代器,所以返回self
    
        def __next__(self):
            try:
                word = self.iter_name[self.index]
            except IndexError:
                raise StopIteration
            self.index += 1
            return word
    
    if __name__ == "__main__":
        user = User(["zhou","bob","java"])
        for it in user:
            print(it)
            
    >>>  
    zhou
    bob
    java
    

    迭代对象和迭代器是实现了 __iter__ 方法的

    而迭代器是额外还需要实现了 __next__ 方法的

    可迭代对象, 迭代器 ,生成器, 序列 ,字典的关系如下:

    image

    结论如下:
    1)在可迭代对象基础上,继续实现 __next__ 就是迭代器。
    2)如果一个对象拥有iter方法,其是可迭代对象;如果一个对象拥有next方法,其是迭代器。
    3)定义可迭代对象,必须实现iter方法;定义迭代器,必须实现iter和next方法。

    相关文章

      网友评论

          本文标题:9-1 自定义迭代器

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