**迭代器 ( Iterator )** 我们要深入了解迭代器就需要知道一个名词 : 可迭代对象( Iterable ) 凡是可作用于 for 循环的对象都是 : 可迭代对象 ( Iterable ) 类型 , 如: str、list、tuple、dict、set 等数据类型。 判断一个对象是否是可迭代对象 ( Iterable ) 可以使用 isinstance() 方法。 ~~~ >>> from collections import Iterable #导入可迭代对象模块 >>> isinstance(123,Iterable) #整形不是可迭代对象 False >>> isinstance('',Iterable) #字符串是可迭代对象 True >>> isinstance([],Iterable) #列表是可迭代对象 True >>> isinstance((),Iterable) #元组是可迭代对象 True >>> isinstance({'name':'airvip'},Iterable) #字典是可迭代对象 True >>> isinstance({'name','airvip'},Iterable) #集合是可迭代对象 ~~~ 迭代器有两个基本的方法:iter() 和 next() 。 **迭代器 (Iterator)** : 可以被 next() 函数调用并不断返回下一个值的对象。 迭代器对象从集合的第一个元素开始访问,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。 迭代器只能往前不会后退。 判断一个对象是否是迭代器对象 ( Iterator ) 也可以使用 isinstance() 方法。 ~~~ >>> from collections import Iterator >>> isinstance(123,Iterator) False >>> isinstance('',Iterable) False >>> isinstance([],Iterator) False >>> isinstance((),Iterator) False >>> isinstance({'name':'airvip'},Iterator ) False >>> isinstance({'name','airvip'},Iterator) False ~~~ 可以看到 str、list、dict、set 等是可迭代对象 ( Iterable ) 但不是迭代器 ( Iterator ) 。 把 str、list、dict、set 等可迭代对象 ( Iterable ) 变成 迭代器 ( Iterator ) 可以使用 iter() 函数。 ~~~ >>> isinstance(iter(''),Iterable) True >>> isinstance(iter([]),Iterator) True >>> isinstance(iter(()),Iterator) True >>> isinstance(iter({'name':'airvip'},Iterator ) True >>> isinstance(iter({'name','airvip'}),Iterator) True ~~~ **实例** ~~~ >>> list = [1,2,3] #初始化一个列表 >>> iter = iter(list) # 创建迭代器对象 >>> next(iter) # 输出迭代器的下一个元素 1 >>> next(iter) 2 >>> next(iter) 3 >>> next(iter) #抛出 StopIteration 错误 Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration ~~~ Python 的 for 循环本质上就是通过不断调用 next() 函数实现的 例如: ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- for i in [0,1,2,3]: print(i,end=',') ~~~ 实际上完全等价于 ~~~ #!/usr/bin/env python3 # -*- coding:utf-8 -*- iter = iter([0,1,2,3]) #创建迭代器对象 while True: #程序进入死循环 try: print(next(iter),end=',') #打印下一个值 except StopIteration: break # 遇到 StopIteration 就退出死循环 ~~~ 执行结果 ~~~ 0,1,2,3, ~~~