迭代
Python 内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:
for i, value in enumerate([‘A’, ‘B’, ‘C’]):… print(i, value)
…0 A1 B2 C
通过collections模块的Iterable类型判断:
from collections import Iterable>>> isinstance(‘abc’, Iterable) # str是否可迭代True>>> isinstance([1,2,3], Iterable) # list是否可迭代True>>> isinstance(123, Iterable) # 整数是否可迭代False
List str dict 为迭代带对象(iterable),凡是可以for循环的都称之为迭代对象
迭代器(iterator):一般为生成器,或者可以yield的
isinstance((x for x in range(10)), Iterable)
Isinstance可判断是否为可迭代对象或者是迭代器
isinstance(iter(‘abc’), Iterator)
Iter()可以将可迭代对象改为迭代器
你可能会问,为什么list、dict、str等数据类型不是Iterator?
这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。