Python中iterable(可迭代对象) vs iterator(可迭代对象)

一.iterable(可迭代对象)

官方文档翻译:

iterable是一个能够一次返回其一个成员的对象。可迭代对象包括所有的序列类型(如list, str, tuple)、一些非序列数据类型(如dict, file objects )、所有定义了__iter__()方法的类对象、所有定义了实现序列语义的__getitem__()方法的类对象。

可迭代对象可以在for循环中使用以及其他许多需要序列的地方(zip(), map(), ...)。当可迭代对象作为参数被传递给内建函数iter()调用时,iter()返回一个迭代器对象。迭代器适用于一组值的一次传递。当使用可迭代对象时,通常不需要自己调用iter()方法或者处理迭代器对象,因为for 语句会自动为你执行该操作——它会在循环期间为你创建一个临时的未命名变量来保存迭代器。参考:iterator, sequence, 和 generator. 

二.iterator(迭代器)

官方文档翻译:

iterator是一个表示数据流的对象。重复调用迭代器的__next__()方法(或将迭代器传递给内置函数next())将返回数据流中的连续项。当没有数据可访问时,将会引发一个StopIteration异常。这个时候,迭代器对象已耗尽,后续任何对__next__()方法的进一步调用都将会再次引发StopIteration异常。

迭代器需要有一个__iter__()方法,__iter__()方法返回迭代器对象本身,所以任何一个迭代器都是可迭代对象,并且可以在在大部分接受可迭代对象的地方使用。一个值得注意的列外是尝试多次迭代传递的代码。

当一个容器对象(如list)被传递给iter()方法的时候或者在for循环中使用的时候,都会生成一个新的迭代器对象— —使用迭代器尝试这样的操作只会返回上一次迭代过程中使用的相同的耗尽的迭代器对象,这样使迭代器起来像一个空容器。

三.iter()

可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。

生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。

把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数:

1 from  collections import Iterable
2 a=[1,2,4,6,8,6,10]
3 a=iter(a)
4 print(next(a))
5 print(next(a))
6 print(next(a))

猜你喜欢

转载自www.cnblogs.com/neseker/p/11911043.html