美文网首页Python基础
Python:迭代器

Python:迭代器

作者: 子休_ | 来源:发表于2018-02-11 21:35 被阅读18次

    在Python中,迭代器是一个很重要的东西。良好的迭代器定义,能让代码更加清晰。

    定义一个迭代器需要实现两个方法__iter____next__

    __iter__返回迭代器对象本身。它是必需的,以允许容器和迭代器在for .. in ..语句中使用。
    __next__返回下一个元素。当没有元素可返回时,应抛出StopIteration

    class X2:
        def __init__(self, n: int):
            self.list = [x*x for x in range(n)]
            self.__count = -1
    
        def __iter__(self):
            return self
    
        def __next__(self):
            self.__count += 1
            try:
                return self.list[self.__count]
            except IndexError:
                raise StopIteration
    
    
    if __name__ == "__main__":
        for each in X2(10):
            print(each)
    
    

    但这样定义似乎有些太麻烦了,Python提供了一个更加简略的方法:

    def X2(n: int):
        for i in range(n):
            yield i*i
    
    
    if __name__ == "__main__":
        for each in X2(10):
            print(each)
    
    

    事实上,如下代码

        for each in X2(10):
            print(each)
    

        t = X2(10)
        while True:
            try:
                each = t.__next__()
            except StopIteration:
                break
            print(each)
    

    是等价的。

    能看出,for .. in ..的运行机制,就是不断地调用被迭代对象的.__next__()方法,直到捕获到StopIteration异常。

    明白了这一点,很容易就能知道,Python的死循环写法至少有两种:while True:和使用for .. in ..迭代一个拥有__iter____next__方法的对象,并且这个对象的__next__方法永远不会抛出StopIteration异常。

    附:next(g)g.__next__()都是调用了g__next__()方法,只不过next(g)可能看起来更友好一点。

    相关文章

      网友评论

        本文标题:Python:迭代器

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