您当前的位置:首页 > 互联网教程

Python基础之迭代器

发布时间:2025-05-11 22:56:59    发布人:远客网络

Python基础之迭代器

一、Python基础之迭代器

而涉及到把多个值循环取出来的类型有:列表,字符串,元组,字段,集合,打开文件等。通过使用的遍历方式有for···in···,while等,但是,这些方式只适用于有索引的数据类型。为了解决索引取的局限性,python提供了一种不依赖于索引的取值方式:迭代器

可迭代对象:但凡内置有__iter__方法的都称为可迭代对象

1.集合数据类型,如list,tuple,dict,set,str等

2.生成器,包括生成器和带yield的生成器函数。

迭代器是一个包含数个值的对象。

迭代器是可以迭代的对象,这意味着您可以遍历所有值。

从技术上讲,在Python中,迭代器是实现迭代器协议的对象,该协议由方法 __iter__()和 __next__()组成。

简而言之,一个类里面实现了__iter__()和__next__()这两个魔法方法,那么这个类的对象就是可迭代对象。

另外,如果类Stu继承了Iterator,那么Stu可以不用实现__iter__()方法

如果你有足够的 next()语句,或者在 for循环中使用,则上面的例子将永远进行下去。

为了防止迭代永远进行,我们可以使用 StopIteration语句。

在 __next__()方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误

二、什么是迭代器,Python迭代器及其用法

1、在之前的章节中,我们对列表、元组、字典和集合等序列容器进行了详细讲解。值得注意的是,这些容器都具备一个共同的特点,即支持使用 for循环进行元素遍历,因此它们也被称为迭代器。

2、从字面上理解,迭代器是指支持迭代的容器,更准确地讲,是支持迭代的容器类对象。这里的容器可以是 Python提供的基础容器,如列表、元组等,也可以是自定义的容器类对象,只要它们支持迭代即可。

3、在前一章节中,我们已经学会了如何自定义一个序列类,但该序列类对象并不支持迭代,因此不能称之为迭代器。若要自定义实现一个迭代器,类中必须实现以下两个方法:

4、next(self):返回容器的下一个元素。

5、iter(self):该方法返回一个迭代器。

6、例如,以下程序自定义了一个简单的列表容器迭代器,支持迭代:

7、除此之外,Python内置的 iter()函数也会返回一个迭代器,其语法格式如下:

8、其中,obj必须是一个可迭代的容器对象,而 sentinel作为可选参数,如果使用此参数,则 obj必须是一个可调用对象,具体功能将在后续章节介绍。

9、可调用对象指的是该类的实例对象可以像函数一样直接使用“对象名()”的形式。通过在类中添加 call()方法,可以将该类的实例对象编程可调用对象。有关 call()方法的介绍将在后续章节中进行。

10、我们常用的是只有一个参数的 iter()函数,通过传入一个可迭代的容器对象,我们可以获得一个迭代器,然后通过调用迭代器中的 next()方法实现迭代。例如:

11、另外,也可以使用 next()内置函数进行迭代,即 next(myIter),与 next()方法作用相同。

12、从程序的执行结果可以看出,当迭代完存储的所有元素后,如果继续迭代,则 next()方法会抛出 StopIteration异常。

13、这里介绍 iter()函数的第二个参数的作用。如果使用该参数,则要求第一个 obj参数必须传入可调用对象(可以不支持迭代)。当使用返回的迭代器调用 next()方法时,它会通过执行 obj()调用 call()方法。如果该方法的返回值与第二个参数值相同,则输出 StopIteration异常;反之,则输出 call()方法的返回值。

14、例如,修改 listDemo类如下所示:

15、输出结果中,最终抛出 StopIteration异常,是因为这里原本要输出的元素 1与 iter()函数的第二个参数相同。

16、迭代器本身是一个底层的特性和概念,在程序中并不常用。然而,它为生成器这一更有趣的特性提供了基础。有关生成器的相关知识将在后续章节中介绍。

三、Python中可迭代对象、迭代器以及iter()函数的两个用法详解

1、在Python编程中,理解可迭代对象(Iterable)、迭代器(Iterator)以及iter()函数的使用至关重要。首先,我们先来澄清两个基本概念:可迭代对象包括列表、元组、字符串等,它们都具备通过for循环遍历元素的特性。Python内置的Iterable类和collections.abc模块中的方法可以用来检测一个对象是否为可迭代对象,这依赖于对象是否实现了__iter__()方法。

2、如果一个对象没有__iter__()方法,但有__getitem__(),解释器会创造一个迭代器并按序获取元素。若两者皆无,会抛出TypeError。我们可以通过自定义对象并实现这两个方法来理解这个过程。

3、迭代器则更进一步,它是一个能记住遍历位置的特殊对象,只能向前推进。迭代器必须实现__iter__和__next__方法,分别用于返回迭代器和获取下一个元素。例如,当我们通过next(iterator)获取下一个值时,如果没有更多元素,会抛出StopIteration异常。

4、iter()函数有两个常见用法。第一个是iter(iterable),将可迭代对象转换为迭代器,以便进一步操作。第二个是iter(callable, sentinel),这里callable可以是任何可调用对象,sentinel作为标记值,当函数返回这个值时,迭代器会结束并抛出StopIteration异常。

5、举个例子,test_iter函数通过iter(callable, sentinel)的第二个用法,创建了一个特殊的迭代器,当函数返回特定值时,会终止迭代。这就是iter()函数的另一个实用场景。

6、总的来说,掌握Python中的这些概念和函数,能帮助你更有效地处理数据和迭代过程。