Iterator與Iterable在Python中有什么區(qū)別?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于做網(wǎng)站、成都做網(wǎng)站、溧水網(wǎng)絡(luò)推廣、小程序制作、溧水網(wǎng)絡(luò)營銷、溧水企業(yè)策劃、溧水品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們大的嘉獎;創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供溧水建站搭建服務(wù),24小時服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.comPython中 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ū)別的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!