迭代器和生成器

文章介绍了迭代器的概念,它是一个可以记住遍历位置的对象,用于遍历容器类型如列表、元组等。迭代器通过iter()和next()方法工作,并在遍历结束时抛出StopIteration异常。自定义迭代器需要实现__iter__()和__next__()方法。接着,文章讨论了生成器,一种特殊的迭代器,它可以逐步生成值,无需一次性计算所有结果。生成器可通过生成器表达式或包含yield的函数来创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、 迭代器

1.1 迭代器是什么?

迭代器是一个可以记住遍历的位置的对象,迭代器是任何实现了__next__()方法的对象,可以通过next(iteration)对其进行迭代,迭代结束时会抛出StopIteration异常

1.2 迭代器有什么用?

可以为python的容器类型生成迭代器,迭代器对象从容器的第一个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前不会后退。python的容器类型包括列表、元组、字符串、字典、集合等等

1.3 怎么使用迭代器

通过迭代器两个基本的方法,iter()以及next(),可以对python的可迭代对象进行迭代。以列表为例:

 当迭代到最后一个元素还没停止时则会报错:

 4. 自行定义迭代器

自行把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__(),其中__iter__()会返回迭代器本身,__next__()方法从迭代器返回下一项。如果没有其他项,则引发StopIteration异常,下面通过代码自己构造迭代器:

首先定义一个迭代器类:

class MyIterator:
    def __init__(self, max):
        self.max = max

    def __iter__(self):
        self.n = 0
        return self

    def __next__(self):
        if self.n < self.max:
            self.n += 1
            return self.n
        else:
            raise StopIteration

实例化这个类,这样my_iterator就成了可迭代对象:

my_iterator = MyIterator(5)
for i in my_iterator:
    print(i)

结果是:

 二、生成器

 2.1 生成器是什么?

生成器(generator)其实是一类特殊的迭代器,它可以逐步产生我们想要的值,而不需要一次性计算并返回所有结果

2.2 生成器使用

生成器有两种使用方法
第一种方法是生成器表达式:

 和迭代器一样,超出范围会报StopIteration异常

第二种方法是yield函数:

当在生成器函数中使用 yield 语句时,函数的执行将会暂停,并将 yield后面的表达式作为当前迭代的值返回。然后,每次调用生成器的next()方法或使用for循环进行迭代时,函数会从上次暂停的地方继续执行,直到再次遇到yield语句。这样,生成器函数可以逐步产生值,而不需要一次性计算并返回所有结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值