幸运的是,在当今时代,各种市场因素已将内存、磁盘甚至 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 对象都可转换为迭代器。
当然,最棒的是您可以生成自己的迭代器类型。您只需使用某些明确指定的方法来定义一个类即可。 这超出了本系列教程的范围,但没关系,因为要自行创建自定义迭代器,最直接的方法并不是采用一个特殊类,而是采用称为生成器函数的特殊函数。接下来就讨论生成器函数。
领取专属 10元无门槛券
私享最新 技术干货