返回介绍

其他内置类型迭代器

发布于 2024-01-29 22:24:16 字数 1484 浏览 0 评论 0 收藏 0

除了文件以及像列表这样的实际的序列外,其他类型也有其适用的迭代器。例如,遍历字典键的经典方法是明确地获取其键的列表。

不过,在最近的Python版本中,字典有一个迭代器,在迭代环境中,会自动一次返回一个键。

直接的效果是,我们不再需要调用keys方法来遍历字典键——for循环将使用迭代协议在每次迭代的时候获取一个键:

我们不能在这里深入细节,但是,其他的Python对象类型也支持迭代协议,因此,也可以在for循环中使用。例如,shelves(用于Python对象的一个根据键访问的文件系统)和os.popen的结果(读取shell命令的输出的一个工具)也是可迭代的:

注意,在Python 2.6中,popen对象支持一个P.next()方法。在Python 3.0中,它们支持P.__next__()方法,但不支持next(P)内置函数。由于后者定义来调用前者,这种形式在未来的发布中是否会保持还不清楚(正如前面的脚注所提到的,这似乎是一个实现问题)。然而,这只是手动迭代的一个问题,如果用for循环或者其他的迭代环境(下一小节介绍)来自动迭代这些对象,在任何Python版本中,它们都将返回连续的行。

迭代协议也是我们必须把某些结果包装到一个list调用中以一次性看到它们的值的原因。可迭代的对象一次返回一个结果,而不是一个实际的列表:

既然对这一协议已经有了较深入的理解,我们应该能够看到它是如何说明上一章所介绍的enumerate工具能够以其方式工作的原因:

我们通常不会看到这种机制,因为for循环为我们自动遍历结果。实际上,Python中可以从左向右扫描的所有对象都以同样的方式实现了迭代协议,包括下一小节所涉及的主题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文