Python--迭代器、itertools库
可迭代对象(iterable):可以逐次返回其成员的项的对象。所有序列类型(list、str、tuple、range)、非序列类型、已经定义了__iter__()方法或实现了__getitem__()的任意的自定义类对象。可迭代对象可用于for循环、以及需要序列的地方(zip()、map()函数等等)。
迭代器(iterator):表示一连串数据流的对象。可以使用内置函数iter()生成一个iterator对象,此函数返回的迭代器只能做一次性的遍历,也就是说把迭代器中的元素都访问一次之后,此迭代器就不包含元素了。调用迭代器的__next__()方法可以依次返回其包含的值。
从图中可以看到,创建了包含三个元素的列表。使用iter()函数返回a的迭代器。调用迭代器本身的__next__()方法,每调用一次返回一个值。当前三次遍历完a列表中的值之后再次调用就会印发错误。内置函数next()和__next__()函数也是一样。
上图中使用for循环访问迭代器,可以看到第一次遍历完元素之后,迭代器就变成一个空的迭代器了。
itertools这个库中有许多的迭代器生成函数,包含无穷迭代器、根据最短输入序列长度停止的迭代器、排列组合迭代器这三种。