1.可迭代对象:

可直接用于for循环的对象统称为可迭代对象(Iterable)。

目前我们已经知道的可迭代(可用于for循环)的数据类型有:

  • 集合数据类型:如list、tuple、dict、set、str等
  • 生成器(Generator)

可以使用isinstance()来判断一个对象是否是Iterable对象:

from collections import Iterable
print(isinstance([], Iterable))

2. 迭代器:

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

  生成器也是迭代器。可以使用isinstance()来验证一下:

from collections import Iterator
print(isinstance((x for x in range(5)), Iterator))

3.迭代器理解

实际上,Python中的Iterator对象表示的是一个数据流,Iterator可以被next()函数调用,且不断返回下一个数据,直到没有数据可以返回时抛出StopIteration异常错误。可以把这个数据流看做一个有序序列,但无法提前知道这个序列的长度。同时,Iterator的计算是惰性的,只有通过next()函数时才会计算并返回下一个数据

  • 生成器对象既是可迭代对象,也是迭代器: 我们已经知道,生成器不但可以作用与for循环,还可以被next()函数不断调用并返回下一个值,直到最后抛出StopIteration错误表示无法继续返回下一个值了。也就是说,生成器同时满足可迭代对象和迭代器的定义;
  • 迭代器对象一定是可迭代对象,反之则不一定: 例如list、dict、str等集合数据类型是可迭代对象,但不是迭代器,但是它们可以通过iter()函数生成一个迭代器对象。

也就是说:迭代器、生成器和可迭代对象都可以用for循环去迭代,生成器和迭代器还可以被next()方函数调用并返回下一个值。(该段来自:https://www.cnblogs.com/yyds/p/6281453.html)

4. iter()函数 可以将可迭代对象转变成迭代器

isinstance(iter([]),Iterator)
True

import itertools
Itor =iter([3,4,5,6,7,8])  #把列表变成一个迭代器
print(type(Itor))

while True:
    try:
        value = next(Itor)
        print(value)
    except StopIteration:
        print("迭代器超界了")
        break

 5. 迭代器其实是一个流的操作,例如文件流

file = open("debug.txt","r",encoding="utf-8")
for lineMsg in file:#这里的file其实是一个迭代器
    print(lineMsg)