Python學(xué)習(xí)之路(高級(jí)特性之迭代器Iterator)

高級(jí)特性 之 迭代器 Iterator

from collections import Iterable # 可迭代對(duì)象
from collections import Iterator # 迭代器

# 檢驗(yàn)是否是可迭代對(duì)象
print('# 檢驗(yàn)是否是可迭代對(duì)象')
print(isinstance([], Iterable))

print(isinstance({}, Iterable))

print(isinstance('abc', Iterable))

print(isinstance(123, Iterable))

print(isinstance({'dd':12, 'pp': 21}, Iterable))

def g(): 
    yield 1
    yield 2

print(isinstance(g(), Iterable))

# 檢驗(yàn)是否是迭代器
print('# 檢驗(yàn)是否是迭代器')
print(isinstance([], Iterator))

print(isinstance({}, Iterator))

print(isinstance('abc', Iterator))

print(isinstance(123, Iterator)) 

print(isinstance({'dd':12, 'pp': 21}, Iterator))

def g(): 
    yield 1
    yield 2

print(isinstance(g(), Iterator))

# 結(jié)果只有g(shù)enerator對(duì)象是迭代器Iterator ,list tuple str等 都不是 ,那么 我們需要怎么轉(zhuǎn)換呢? 這里需要用到iter()函數(shù) 來(lái)進(jìn)行轉(zhuǎn)換
# iter()函數(shù) 是將可迭代對(duì)象轉(zhuǎn)換為迭代器
print('# iter()函數(shù) 是將可迭代對(duì)象轉(zhuǎn)換為迭代器')
print(isinstance(iter([]), Iterator))

print(isinstance(iter({}), Iterator))

print(isinstance(iter('abc'), Iterator))

# print(isinstance(iter(123), Iterator)) # 報(bào)錯(cuò) TypeError: 'int' object is not iterable

print(isinstance(iter({'dd':12, 'pp': 21}), Iterator))

你可能會(huì)問(wèn),為什么list、dict、str等數(shù)據(jù)類型不是Iterator?

這是因?yàn)镻ython的Iterator對(duì)象表示的是一個(gè)數(shù)據(jù)流,Iterator對(duì)象可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)數(shù)據(jù),直到?jīng)]有數(shù)據(jù)時(shí)拋出StopIteration錯(cuò)誤。可以把這個(gè)數(shù)據(jù)流看做是一個(gè)有序序列,
但我們卻不能提前知道序列的長(zhǎng)度,只能不斷通過(guò)next()函數(shù)實(shí)現(xiàn)按需計(jì)算下一個(gè)數(shù)據(jù),所以Iterator的計(jì)算是惰性的,只有在需要返回下一個(gè)數(shù)據(jù)時(shí)它才會(huì)計(jì)算。

小結(jié)

凡是可作用于for循環(huán)的對(duì)象都是Iterable類型;

凡是可作用于next()函數(shù)的對(duì)象都是Iterator類型,它們表示一個(gè)惰性計(jì)算的序列;

集合數(shù)據(jù)類型如list、dict、str等是Iterable但不是Iterator,不過(guò)可以通過(guò)iter()函數(shù)獲得一個(gè)Iterator對(duì)象。

關(guān)注一波!喜歡一波!本人是前端菜鳥,正在做自己的個(gè)人博客鄧鵬的博客,歡迎來(lái)交流學(xué)習(xí), 使用的技術(shù) vue + koa2 + mysql + php + nginx!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容