(1) 什么是迭代器
所有可以用来执行“循环”操作的对象都必须是可迭代对象Iterable,即这类对象每次返回一个成员(元素)。
基于Iterable,又衍生了Iterator和Generator两个数据结构。
(2) 迭代器存在的原因:
一言以蔽之就是节省内存。如果需要遍历一个很大的list, 内存不用开辟很大的一片空间来装整个list, 只需要分配list中一个元素大小的空间(假设list中每个元素所占内存大小一一样)即可。
(3) 设计思路:
1) Iterable可迭代对象
feature:
- 拥有__iter__()或者__getitem__()函数
功能:
- 每次循环返回一个对象
2) Iterator迭代器
feature:
- 拥有__iter__()函数
- 拥有__next__()函数(python3)(拥有next()函数)
功能:
- 迭代器一定是可迭代对象Iterator
- 相比于Iterable, Iterator可通过next函数控制每次返回的值
3) Generator生成器
feature:
- 含有yield关键字
功能:
- 生成器一定是一个迭代器
- 生成器可以从next函数上次函数的地方继续往下执行
(4)代码实现
1) 使用迭代器,打印数组中基数下标的元素
2) 使用生成器, 依次返回由三个元素返回的子数组
case:生成器2
>>> list_square = [x*x for x in range(5)]
>>> list_square
[0, 1, 4, 9, 16]
>>> type(list_square)
<type 'list'>
>>> generator_square = (x*x for x in range(5))
>>> generator_square
<generator object <genexpr> at 0x105fba870>
>>> type(generator_square)
<type 'generator'>
#类型验证
>>> from collections import Iterable, Iterator
>>> isinstance(generator_square, Iterator)