返回介绍

Python 3.0 中的新的可迭代对象

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

Python 3.0中的一个基本的改变是,它比Python 2.X更强调迭代。除了与文件和字典这样的内置类型相关的迭代,字典方法keys、values和items都在Python 3.0中返回可迭代对象,就像内置函数range、map、zip和filter所做的那样。正如前一小节所介绍的,这些函数中的最后三个都返回可迭代对象并处理它们。所有这些工具在Python 3.0中都根据请求产生结果,而不是像它们在Python 2.6中那样构建结果列表。

尽管这样会节约内存空间,它可能在某种程度上会影响到我们的编码方式。目前为止,在本书中的各种地方,我们已经把各种函数和方法调用结果都包含到一个list(...)调用中,从而迫使它们一次产生其所有的结果:

这在Python 2.6中不是必需的,因为像zip这样的函数返回结果的列表。在Python 3.0中,它们返回可迭代的对象,根据需要来产生结果。这意味着要在交互提示模式下(并且可能在某些其他的环境中)显示结果需要额外的录入,这对较大的程序来说很有用,在计算很大的结果列表的时候,像这样的延迟计算会节约内存并避免暂停。让我们快速地浏览Python 3.0可迭代对象的应用。

range迭代器

在上一章中,我们学习过range内置函数的基本行为。在Python 3.0中,它返回一个迭代器,该迭代器根据需要产生范围中的数字,而不是在内存中构建一个结果列表。这取代了较早的Python 2.X xrange(参见后面的版本差异提示),如果需要一个范围列表的话,你必须使用list(range(...))来强制一个真正的范围列表(例如,显示结果):

和这个调用在Python 2.X中返回的列表不同,Python 3.0中的range对象只支持迭代、索引以及len函数。它们不支持任何其他的序列操作(如果你需要更多列表工具的话,使用list(...)):

注意:版本差异提示:Python 2.X也有一个名为xrange的内置函数,它就像range一样,但是根据需要产生元素而不是一次性在内存中构建一个结果列表。由于这完全就是新的基于迭代的range在Python 3.0中所做的事情,xrange在Python 3.0中不再可用——它已经被取代了。然而,在Python 2.X的代码中我们仍将看到它,特别是由于range构建了结果列表并且因此不像在其内存用法中那么高效。正如上一章的边栏中提到,由于类似的原因,Python 2.X中用来最小化内存使用的file.xreadlines()方法已经在Python 3.0中取消了,而是倾向于使用文件迭代。

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

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

发布评论

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