問(wèn)題描述 可迭代對(duì)象指的是定義了_ _ iter _ _ 方法的對(duì)象,,調(diào)用該方法會(huì)返回一個(gè)迭代器對(duì)象。可迭代對(duì)象,,例如:list列表,、tuple元組、帶有上述iter方法的對(duì)象等等,。 迭代器就是定義_ _ next _ _ 方法的對(duì)象,。每次調(diào)用上述方法就返回迭代器一個(gè)值,沒(méi)有就拋出StopIteration異常,。 解決方案 如果給定一個(gè)list或tuple,,我們可以用for循環(huán)來(lái)遍歷這個(gè)list或tuple,這種遍歷我們稱為迭代(Iteration),。在Python中,,迭代是用for…in來(lái)完成的,,而很多語(yǔ)言比如C語(yǔ)言,迭代list是通過(guò)下標(biāo)完成的 一類是集合數(shù)據(jù)類型,,如list,、tuple、dict,、set,、str等;一類是generator,,包括生成器和帶yield的generator function,。這些可以直接作用于for循環(huán)的對(duì)象統(tǒng)稱為可迭代對(duì)象:Iterable 創(chuàng)建方法 1 可迭代對(duì)象 Python的for循環(huán)抽象程度要高于C的for循環(huán),因?yàn)?/span>Python的for循環(huán)不僅可以用在list或tuple上,,還可以作用在其他可迭代對(duì)象上,。list這種數(shù)據(jù)類型雖然有下標(biāo),但很多其他數(shù)據(jù)類型是沒(méi)有下標(biāo)的,,但是,,只要是可迭代對(duì)象,無(wú)論有無(wú)下標(biāo),,都可以迭代,,比如dict就可以迭代:
因?yàn)?/span>dict的存儲(chǔ)不是按照list的方式順序排列,所以,,迭代出的結(jié)果順序很可能不一樣,。 默認(rèn)情況下,dict迭代的是key,。如果要迭代value,,可以用for value in d.values(),如果要同時(shí)迭代key和value,,可以用for k,v in d.items(),。 由于字符串也是可迭代對(duì)象,因此,,也可以作用于for循環(huán):
判斷一個(gè)對(duì)象是否是可迭代對(duì)象可以通過(guò)collections模塊的Iterable類型判斷
2 迭代器 迭代器可以由可迭代對(duì)象通過(guò)內(nèi)置函數(shù)iter()函數(shù)實(shí)現(xiàn),該函數(shù)會(huì)接受一個(gè)可迭代對(duì)象,,返回一個(gè)迭代器對(duì)象,。實(shí)際上,iter()函數(shù)內(nèi)部調(diào)用可迭代對(duì)象的——iter——方法,。而前面在可迭代對(duì)象中就提到,,該方法會(huì)返回一個(gè)迭代器對(duì)象 可以被next()函數(shù)調(diào)用并不斷返回下一個(gè)值的對(duì)象稱為迭代器:Iterator。 可以使用isinstance()判斷一個(gè)對(duì)象是否是Iterator對(duì)象:
結(jié)語(yǔ) 凡是可作用于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ì)象。Python的for循環(huán)本質(zhì)上就是通過(guò)不斷調(diào)用next()函數(shù)實(shí)現(xiàn)的,。 主 編 | 王文星 責(zé) 編 | 李 靖 where2go 團(tuán)隊(duì) |
|