python迭代器

Posted on 2022-02-13 03:08  foghorn  阅读(93)  评论(0编辑  收藏  举报

什么是迭代器

迭代是python中访问集合元素的一种非常强大的一种方式。迭代器是一个可以记住遍历位置的对象,因此不会像列表那样一次性全部生成,而是可以等到用的时候才生成,因此节省了大量的内存资源。迭代器对象从集合中的第一个元素开始访问,直到所有的元素被访问完。迭代器有两个方法:iter()和next()方法。

什么是可迭代的对象

类似于list、tuple、str 等类型的数据可以使用for …… in…… 的循环遍历语法从其中依次拿到数据并进行使用,我们把这个过程称为遍历,也称迭代。python中可迭代的对象有list(列表)、tuple(元组)、dirt(字典)、str(字符串)set等。除此之外,也可以创建一个可迭代的对象:只要此对象含有__iter__方法,那么它就是一个可迭代的对象,如果还含有__next__()方法,那么它就是迭代器。

创建一个迭代器

需要实现__iter__()和__next()__方法

class Fabonaci:
    def __init__(self, num):
        self.num = num
        self.count = 0
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.count < self.num:
            ret = self.a
            self.a, self.b = self.b, self.a + self.b
            self.count += 1
            return ret
        else:
            raise StopIteration


if __name__ == "__main__":
    fb = Fabonaci(5)
    for v in fb:
        print(v)

创建一个可迭代对象

只需要实现__iter__()方法

class Iter:
    def __init__(self, num):
        self.num = num

    def __iter__(self):
        return Fabonaci(self.num)


class Fabonaci:
    def __init__(self, num):
        self.num = num
        self.count = 0
        self.a = 0
        self.b = 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.count < self.num:
            ret = self.a
            self.a, self.b = self.b, self.a + self.b
            self.count += 1
            return ret
        else:
            raise StopIteration


if __name__ == "__main__":
    it = iter(Iter(5))
    
    while True:
        print(next(it))

程序中将Iter(5)转换成了迭代器,所以可以使用next()方法遍历其元素;但Iter(5)本是只是一个可迭代的对象,可以直接用for循环遍历里面的元素。

Copyright © 2024 foghorn
Powered by .NET 9.0 on Kubernetes