Python编程中的迭代器协议与遍历方法

前言

前篇内容的介绍应该能很容易地让我们理解掌握​​Python中的可迭代对象和迭代器(Iterable & Iterator)​​。本次内容我们来进一步介绍迭代器的有关内容。

Python编程:迭代器协议与遍历,轻松搞定

迭代器协议

在Python中,迭代器(Iterator)对象需要支持以下两个方法,它们一起构成迭代器协议:

1)__iter__():

对象的该方法返回迭代器对象本身。这是要求容器和迭代器与for-in语句一起使用所必需的。你也可以使用内置的iter()函数,该函数实质上是在背后调用了__iter__()方法的。

2)__next__():

从迭代器中返回下一项。如果没有其他项,则抛出StopIteration异常。也可以使用内置的next()函数读取下一项,其实质也是调用__next__()方法。

正如我们在前所讲过的,列表、元组、字典和集合都是可迭代类型。换句话说,它们是可以从中获得迭代器的类型。看示例:

Python编程:迭代器协议与遍历,轻松搞定

代码片段清单-01

输入结果如下:

ABC

登录后复制

在示例代码中,我们定义了一个可迭代元组。然后对这个可迭代对象调用iter()函数。iter()函数返回一个迭代器,我们将其命名为tupIter。然后多次调用next()函数。next()函数每次执行时,都会自动返回迭代器中的下一项。

再看下一段示例代码:

Python编程:迭代器协议与遍历,轻松搞定

代码片段-02

运行输出的结果为:

Py

登录后复制

在上述代码清单中,在字符串对象上调用__ iter__()方法。字符串对象实现了迭代器协议,所以字符串是包含字符序列的可迭代对象的。直接调用__ iter__()方法就可返回一个迭代器。然后再通过返回的迭代器调用__ next__()方法,就可一个一个地输出迭代器中的元素内容。

一言以蔽之,只要实现了迭代器协议的对象,即可按照上面的两种方法进行对象的迭代调用。

迭代器遍历

正如我们在前介绍中看到的,我们使用next()函数(或__next__()方法)手动遍历迭代器的项。当next()函数到达迭代器的末尾时,就没有更多的数据要返回,将得到一个StopIteration异常。

请看示例:

Python编程:迭代器协议与遍历,轻松搞定

代码片段清单-03

运行上述程序,输出结果类似如下:

10

20

30

Traceback (most recent call last):

File ……, in

print(next(listIter))

StopIteration

在上述代码中,调用了next()函数四次,这比迭代器中的项数还要多。在最后一个调用中得到了抛出的StopIteration异常——因为迭代器内元素项已经迭代完了。而且,为保证手动迭代完成后可能抛出的异常,得自行进行异常处理,否则后续将不再正常执行。

需要认识到的是:绝大多数场景下,我们不需要自己手动调用next方法,Python中的for循环能够自动遍历任何可以返回迭代器的对象。换句话说,for循环可以遍历Python中的任何可迭代对象。

请看示例:

Python编程:迭代器协议与遍历,轻松搞定

代码清单片段04

在上述代码中,我们使用for循环遍历前面定义的列表。显而易见,我们没有手动使用next()函数,也没有获得任何StopIteration异常。这就是Python中for循环的美妙之处。它在幕后为我们处理所有这些。

当然,我们可以自行这样来处理循环迭代。现在定义一个我们自己的for循环版本。我们将使用while循环并复制for循环的行为。在此,我们自己构建该实现所需的一切。如下所示:

Python编程:迭代器协议与遍历,轻松搞定

代码清单片段-05

在上述清单中,我们实现了自己版本的模拟for循环。代码中使用无限while循环:while True。在循环中设置了一个try-except块。在try块中,通过调用迭代器上的__next__()方法获得下一个元素。如果调用成功,则打印出该元素。如果发生了StopIteration类型的错误,则在except块中捕获该异常。在except块中所做的事情非常简单。我们只是跳出这个循环,这意味着我们已经到达迭代器的末端。

小结

本篇内容就写这些了,主要介绍了迭代器协议和和迭代器遍历。内容的文字不长,再结合代码能帮助你更好地理解和掌握这些Python编程知识点。

以上就是Python编程中的迭代器协议与遍历方法的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2237539.html

(0)
上一篇 2025年2月26日 19:00:56
下一篇 2025年2月26日 19:01:22

AD推荐 黄金广告位招租... 更多推荐

相关推荐

发表回复

登录后才能评论