直接做⽤於 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
總結