Python 语言对迭代的支持如此深入,因此我经常说,Python 已经融合(grok)了迭代器。17Python 从语义上集成迭代器模式是个很好的例证,说明设计模式在各种编程语言中使用的方式并不相同。在 Python 中,自己动手实现的典型迭代器(如示例 14-4 所示)没有实际用途,只能用作教学示例。
17根据新黑客字典(Jargon file,http://catb.org/~esr/jargon/html/G/grok.html),grok 的意思不仅是学会了新知识,还要充分吸收知识,做到“人剑合一”。
本章中编写了一个类的几个版本,用于读取内容可能很多的文件,并迭代里面的单词。因为用了生成器,所以在重构的过程中,Sentence 类越来越简短,越来越易于阅读。最终,我们知道了生成器的工作原理。
后来,我们编写了一个用于生成等差数列的生成器,还说明了如何利用 itertools 模块做简化。随后,概览了标准库中 24 个通用的生成器函数。
接着,我们分析了内置的 iter 函数:首先说明,以 iter(o) 的形式调用时返回的是迭代器;之后分析,以 iter(func, sentinel) 的形式调用时,能使用任何函数构建迭代器。
分析实例时,我说明了一个数据库转换工具的实现方式,指明如何使用生成器函数解耦读写逻辑,如何高效处理大型数据集,以及如何轻易支持多种数据输入格式。
本章还提到了 Python 3.3 中新出现的 yield from 句法,还有协程。这里只对二者做了简单介绍,本书后面会更为深入地讨论。