《Fluent Python》第14章 可迭代的对象、迭代器和生成器
前言 迭代是数据处理的基石。扫描内存中放不下的数据集时,我们要找到一种惰性获取数据项的方式,即按需一次获取一个数据项。这就是迭代器模式(Iterator pattern) 所有生成器都是迭代器,因为生成器完全实现了迭代器接口 在Python3 中,生成器有广泛的用途。现在,即使是内置的range()函数也返回一个类似生成器的对象,而以前则返回完整的列表 iter() 解释器需要迭代对象x时,会自动调用iter(x). 内置的iter函数有以下作用: 检查对象是否实现了__iter__(),如果实现了就调用它,从而获取一个迭代器 当__iter__()不存在时转而调用__getitem__(), python会创建一个迭代器,尝试按顺序(从索引0开始)获取元素 抛出TypeError, 提示object is not iterable 可迭代的对象与迭代器的对比 下面是一个简单的 for 循环,迭代一个字符串。这里,字符串ABC 是可迭代的对象。背后是有迭代器的,只不过我们看不到: 1 2 3 4 5 6 s = 'ABC' for ch in s: print(s) >>> A >>> B >>> C 若使用while, 使用可迭代的对象构建迭代器it 1 2 3 4 5 6 7 8 9 10 11 s = 'ABC' it = iter(s) while True: try: print(next(it)) except StopIteration: del it break >>> A >>> B >>> C 标准的迭代器接口有两个方法:...