溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Iterator與Iterable在Python中有什么區(qū)別

發(fā)布時間:2021-01-28 18:41:35 來源:億速云 閱讀:206 作者:Leah 欄目:開發(fā)技術(shù)

Iterator與Iterable在Python中有什么區(qū)別?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。

Python中 list,truple,str,dict這些都可以被迭代,但他們并不是迭代器。為什么?

因為和迭代器相比有一個很大的不同,list/truple/map/dict這些數(shù)據(jù)的大小是確定的,也就是說有多少事可知的。但迭代器不是,迭代器不知道要執(zhí)行多少次,所以可以理解為不知道有多少個元素,每調(diào)用一次next(),就會往下走一步,是惰性的。

判斷是不是可以迭代,用Iterable

from collections import Iterable
isinstance({}, Iterable) --> True
isinstance((), Iterable) --> True
isinstance(100, Iterable) --> False

判斷是不是迭代器,用Iterator

from collections import Iterator
isinstance({}, Iterator) --> False
isinstance((), Iterator) --> False
isinstance( (x for x in range(10)), Iterator) --> True

所以,

凡是可以for循環(huán)的,都是Iterable

凡是可以next()的,都是Iterator

集合數(shù)據(jù)類型如list,truple,dict,str,都是Itrable不是Iterator,但可以通過iter()函數(shù)獲得一個Iterator對象

Python中的for循環(huán)就是通過next實現(xiàn)的

for x in [1,2,3,4,5]:
 pass

等價于

#先獲取iterator對象
it = iter([1,2,3,4,5])
while True:
 try:
  #獲取下一個值
  x = next(it);
 except StopIteration:
  # 遇到StopIteration就退出循環(huán)
  break

看完上述內(nèi)容,你們掌握Iterator與Iterable在Python中有什么區(qū)別的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI