Python 迭代器简介

幸运的是,在当今时代,各种市场因素已将内存、磁盘甚至 CPU 容量的价格统统压缩至原先难以想象的低价。但与此同时,诸如大数据、AI 和认知计算这类蓬勃发展的应用,正在以超快的速度推升我们对于这些资源的需求。令人感觉有点啼笑皆非的是,当计算资源较充足时,开发人员了解如何降低资源耗用量来保持竞争力却变得愈加重要。

近二十年来,Python 始终是一种热门编程语言,主要原因就在于它非常易于学习。短短一小时,您就能学会如何轻松操作列表和字典。但令人生厌的是,这种利用列表和字典来解决众多问题的方法不免有些幼稚,它很快就会为您带来麻烦,迫使您不得不设法扩展应用规模,因为稍有不慎,Python 就会变得比其他编程语言更加耗用资源。

好消息是 Python 有一些非常实用的功能,有助于提升处理效率。其中许多功能都基于 Python 的迭代器协议,这也是本教程的重要主题。在此基础上将构建一整套教程,总共包含四个部分,主要向您展示如何利用 Python 来高效处理大型数据集。

您应熟悉 Python 基础知识,如条件、循环、函数、异常、列表和字典。此系列教程是围绕 Python 3 开展的;要运行代码,就需要使用 Python 3.5 或更高版本。

迭代器

您最初接触到的 Python 循环可能类似以下代码:

Python 的语句在所谓的迭代器上运行。迭代器是可重复调用以生成一系列值的对象。如果关键字后的值尚未成为迭代器,那么会尝试将其转换为迭代器。内置函数就是可以转换为迭代器的一个示例。它可生成一系列数字,循环会对这些项进行迭代,依次将每个项分配到变量。

现在,可通过更仔细地查看像 range 这样的迭代器来深入了解 Python。在 Python 解释器中输入以下内容:

您现在已完成了 range 迭代器的初始化,但仅此而已。接下来,要求此迭代器提供其首个值。在 Python 中使用内置函数来要求迭代器提供一个值。

此异常表明您必须要先将对象转换为迭代器,然后才能将其用作迭代器。可以使用内置函数来执行此操作。

此时会打印 0,这与您的预期相符。接下来再次输入,将会打印 1,以此类推。继续在此行中输入。在这一点上,值得高兴的是,对于大部分系统,只需按 Python 解释器上的向上箭头即可检索最近使用的命令,然后按 Enter 键即可重复执行命令,您甚至还可以在按 Enter 键之前随意对其进行调整。

在此情况下,最终将得到类似如下的结果:

我们要求的范围仅为 10 个整数,因此在它生成 9 之后即告结束。此迭代器不会立即执行任何操作来指示它已结束,但任何后续的调用都将生成异常。就像处理其他任何异常一样,您可以选择自行编写代码对其进行处理。在迭代器用完后,尝试输入以下代码。

它会打印消息“That's all folks!”语句使用异常来确定何时退出循环。

其他可迭代对象

range 只是可转换为迭代器的一种对象。以下解释器会话演示了如何将各种标准类型解释为迭代器。

对于列表或元组,这是非常直接的过程。字典仅对其键进行迭代,当然无法保证顺序。对于集合也无法保证迭代顺序,即使在此示例中,来自迭代器的首个项碰巧也是用于构造集合的元组中的首个项。字符串会对其字符进行迭代。所有此类对象都称为可迭代对象。

正如您可能想到的,并非每个 Python 对象都可转换为迭代器。

当然,最棒的是您可以生成自己的迭代器类型。您只需使用某些明确指定的方法来定义一个类即可。 这超出了本系列教程的范围,但没关系,因为要自行创建自定义迭代器,最直接的方法并不是采用一个特殊类,而是采用称为生成器函数的特殊函数。接下来就讨论生成器函数。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180727G0S6AA00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券