直接作⽤于 for 循环的数据类型有以下⼏种:
这些可以直接作⽤于 for 循环的对象统称为可迭代对象: Iterable
可以使⽤ isinstance() 判断⼀个对象是否是 Iterable 对象:
#从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))
运行结果为:
True
True
True
True
False
可以看出,列表、字典、生成器、字符串都是可以被迭代的,而整形常量不可以被迭代
可以被next()函数调⽤并不断返回下⼀个值的对象称为迭代器:Iterator。 可以使⽤ isinstance() 判断⼀个对象是否是 Iterator 对象:
#从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
注意:
⽣成器是迭代器对象,但列表、字典 、字符串虽然是可迭代的,却不是迭代器。把列表、字典、字符串等可迭代对象变成迭代器可以使⽤ 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))
运行结果为:
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
总结