参考链接: Python官网:术语对照表
iterable -- 可迭代对象
能够逐一返回其成员项的对象。 可迭代对象的例子包括所有序列类型
(例如 list, str 和 tuple) 以及某些非序列类型例如 dict, 文件对象 以及定
义了 __iter__() 方法或是实现了 序列 语义的 __getitem__() 方法的任
意自定义类对象。
可迭代对象被可用于 for 循环以及许多其他需要一个序列的地方(zip()、map() ...)。
当一个可迭代对象作为参数传给内置函数 iter() 时,它会返回该对象的迭代器。
这种迭代器适用于对值集合的一次性遍历。在使用可迭代对象时,
你通常不需要调用 iter() 或者自己处理迭代器对象。
for 语句会为你自动处理那些操作,
创建一个临时的未命名变量用来在循环期间保存迭代器。
参见 iterator、sequence 以及 generator。
iterator -- 迭代器
用来表示一连串数据流的对象。重复调用迭代器的 __next__() 方法
(或将其传给内置函数 next())将逐个返回流中的项。
当没有数据可用时则将引发 StopIteration 异常。
到这时迭代器对象中的数据项已耗尽,继续调用其 __next__() 方法
只会再次引发 StopIteration 异常。迭代器必须具有 __iter__() 方法
用来返回该迭代器对象自身,因此迭代器必定也是可迭代对象,可被
用于其他可迭代对象适用的大部分场合。一个显著的例外是那些会多
次重复访问迭代项的代码。容器对象(例如 list)在你每次向其传
入 iter() 函数或是在 for 循环中使用它时都会产生一个新的迭代器。
如果在此情况下你尝试用迭代器则会返回在之前迭代过程中被耗尽
的同一迭代器对象,使其看起来就像是一个空容器。
更多信息可查看 迭代器类型。
generator -- 生成器
返回一个 generator iterator 的函数。它看起来很像普通函数,
不同点在于其包含 yield 表达式以便产生一系列值供给 for-循环使用
或是通过 next() 函数逐一获取。通常是指生成器函数,但在某些情
况下也可能是指 生成器迭代器。如果需要清楚表达具体含义,请使
用全称以避免歧义。
generator iterator -- 生成器迭代器
generator 函数所创建的对象。
每个 yield 会临时暂停处理,记住当前位置执行状态(包括局部变
量和挂起的 try 语句)。当该 生成器迭代器 恢复时,它会从离开
位置继续执行(这与每次调用都从新开始的普通函数差别很大)。
generator expression -- 生成器表达式
返回一个迭代器的表达式。 它看起来很像普通表达式后面带有定
义了一个循环变量、范围的 for 子句,以及一个可选的 if 子句。
以下复合表达式会为外层函数生成一系列值:
>>>
>>> sum(i*i for i in range(10)) # sum of squares 0, 1, 4, ... 81
285
参考链接: Python官网:内置类型
参考链接: Python官网:迭代器类型
参考链接: Python官网:生成器类型
迭代器类型
Python 支持在容器中进行迭代的概念。 这是通过使用两个单独方法来实现的;
它们被用于允许用户自定义类对迭代的支持。
将在下文中详细描述的序列总是支持迭代方法。
容器对象要提供迭代支持,必须定义一个方法:
container.__iter__()
返回一个迭代器对象。 该对象需要支持下文所述的迭代器协议。
如果容器支持不同的迭代类型,则可以提供额外的方法来专门地
请求不同迭代类型的迭代器。 (支持多种迭代形式的对象的例
子有同时支持广度优先和深度优先遍历的树结构。) 此方法对
应于 Python/C API 中 Python 对象类型结构体的 tp_iter 槽位。
迭代器对象自身需要支持以下两个方法,它们共同组成了 迭代器协议:
iterator.__iter__()
返回迭代器对象本身。 这是同时允许容器和迭代器配合 for 和 in 语
句使用所必须的。 此方法对应于 Python/C API 中 Python 对象类型
结构体的 tp_iter 槽位。
iterator.__next__()
从容器中返回下一项。 如果已经没有项可返回,则会引发
StopIteration 异常。 此方法对应于 Python/C API 中 Python 对象
类型结构体的 tp_iternext 槽位。
Python 定义了几种迭代器对象以支持对一般和特定序列类型、字典
和其他更特别的形式进行迭代。 除了迭代器协议的实现,特定类型
的其他性质对迭代操作来说都不重要。
一旦迭代器的 __next__() 方法引发了 StopIteration,它必须一直对
后续调用引发同样的异常。 不遵循此行为特性的实现将无法正常使用。
生成器类型
Python 的 generator 提供了一种实现迭代器协议的便捷方式。 如果
容器对象 __iter__() 方法被实现为一个生成器,它将自动返回一个
迭代器对象(从技术上说是一个生成器对象),该对象提供 __iter__()
和 __next__() 方法。 有关生成器的更多信息可以参阅 yield 表达式的文档。