【来自别人的经验】
1. 可以作用于 for 循环的对象统称为 可迭代对象 【iterable】。
2. 可以被 next() 函数调用兵不断返回下一个之的对象称为 迭代器 【iterator】。
3. 所有的 iterable 都可以通过内置函数 iter() 来转变为 迭代器 【iterator】。
4. 对 迭代器 来讲,有一个 __next() 就够了。在你使用 for 和 in 语句时,程序就会自动调用即将被处理的对象的迭代器对象,然后使用它的 next__() 方法,直到监测到 StopIteration 异常。
5. 生成器 也是一种 迭代器,所以 生成器 有 __next__() 方法,也可以使用内置 next() 函数,因为这都是迭代器对象才有的方法。同时由于迭代器迭代完了以后就没有了,所以生成器也一样,要访问就要再次生成。
L = [1, 2, 3, 4] # 列表
for i in L:
print(i) # 可以用 for 语句访问可迭代对象
# next(L) # 可迭代对象没有 next() 方法
# 使用 iter() 方法将 可迭代对象 转换成 迭代器
I = iter(L)
next(I) # 1
next(I) # 2
next(I) # 3
next(I) # 4
next(I) # StopIteration
【备注】
python 中有个 itertools 模块,提供了一些非常有用的用于操作迭代对象的函数。