直接做⽤于 for 循环的数据类型有如下⼏种:函数
这些能够直接做⽤于 for 循环的对象统称为可迭代对象: Iterable工具
能够使⽤ isinstance() 判断⼀个对象是不是 Iterable 对象:spa
#从collections.abc模块导入Iterable工具
from collections.abc import Iterable #判断列表是否能够迭代
print(isinstance([],Iterable)) #判断字典是否能够迭代
print(isinstance({},Iterable)) #判断生成器是否能够迭代
print(isinstance((x for x in range(1,10)),Iterable)) #判断字符串是否能够迭代
print(isinstance("abc",Iterable)) #判断整形是否能够迭代
print(isinstance(100,Iterable))
运行结果为:code
True
True
True
True
False
能够看出,列表、字典、生成器、字符串都是能够被迭代的,而整形常量不能够被迭代对象
能够被next()函数调⽤并不断返回下⼀个值的对象称为迭代器:Iterator。
能够使⽤ isinstance() 判断⼀个对象是不是 Iterator 对象:blog
#从collections.abc模块导入Iterator工具
from collections.abc import Iterator #判断列表是否能够迭代
print(isinstance([],Iterator)) #判断字典是否能够迭代
print(isinstance({},Iterator)) #判断生成器是否能够迭代
print(isinstance((x for x in range(1,10)),Iterator)) #判断字符串是否能够迭代
print(isinstance("abc",Iterator)) #判断整形是否能够迭代
print(isinstance(100,Iterator))
运行结果为:内存
False
False
True
False
False
注意:ci
⽣成器是迭代器对象,但列表、字典 、字符串虽然是可迭代的,却不是迭代器。把列表、字典、字符串等可迭代对象变成迭代器能够使⽤ iter() 函数:字符串
#从collections.abc模块导入Iterator工具
from collections.abc import Iterator #没有使用iter()函数
print(isinstance([],Iterator)) print(isinstance("abc",Iterator)) #使用iter()函数
print(isinstance(iter([]),Iterator)) print(isinstance(iter("abc"),Iterator))
运行结果为:generator
False
False
True
True
for x in [1,2,3,4,5]: print(x) #彻底等价于
# 首先得到Iterator对象:
it = iter([1, 2, 3, 4, 5]) # 循环:
while True: try: # 得到下一个值:
x = next(it) print(x) except StopIteration: # 遇到StopIteration就退出循环
break
总结