Python 迭代器與可迭代物件

2021-08-21 17:25:23 字數 1478 閱讀 1560

迭代器可以讓我們訪問集合的時候變得非常方便。之前我們通過for...in...的方式訪問乙個集合的時候,就是使用迭代器完成的。如果沒有迭代器,那麼我們只能通過while迴圈,每次迴圈的時候通過下標訪問了。

可以直接使用for迴圈遍歷的物件,成為可迭代的物件,常見的可迭代的物件有:listtupledictsetstr以及生成器。

更加專業的判斷乙個物件是否是可迭代的物件是:這個物件有乙個__iter__方法,並且這個方法會返回乙個迭代器物件,這種物件就叫做可迭代的物件。

ret = isinstance([1,2,3],iterable)

print(ret) #ret的值為true

class myrangeiterator(object):

"""迭代器

"""def __init__(self,start,end):

self.index = start

self.end = end

def __next__(self):

if self.index < self.end:

index = self.index

self.index += 1

return index

else:

raise stopiteration()

class myrange(object):

"""可迭代物件

"""def __init__(self,start,end):

self.start = start

self.end = end

def __iter__(self):

return myrangeiterator(self.start,self.end)

# 初始化乙個可迭代的物件

for x in myrange(1,10):

print(x)

這裡有兩個重要對的魔術方法,__iter__與__next__。魔術方法不會被顯式的呼叫,只有在for in 遍歷這個物件時,會先呼叫__iter__獲得乙個迭代器,然後再呼叫這個迭代器的__next__方法獲取可迭代物件。魔術方法會被隱式的執行的!這個過程也是f用for遍歷的底層做的事情。

想獲得乙個迭代器必須經過__iter__,要想獲得可迭代物件就要使用__next__方法,兩者天生一對,不可或缺!

有時候我們擁有了乙個可迭代的物件,我們想要獲取這個迭代器,那麼可以通過iter(x)方法獲取這個可迭代物件的迭代器。

# 使用itre函式將可迭代的物件轉換為迭代器

range_iterator = iter(myrange(1,10))

python迭代 可迭代物件與迭代器物件

問題舉例 某軟體要求,從網路抓取各個城市的氣溫資訊,並依次顯示 北京 15 22 上海 18 23 如果一次抓取所有城市氣溫資訊再顯示,顯示第乙個城市的氣溫時會由很長的延時,並且浪費儲存空間,我們期望以 用時訪問 的策略,並且把所有城市的氣溫資訊封裝 到乙個物件裡,可用for語句進行迭代。來個栗子 ...

python 迭代器與可迭代物件

主要有兩個方法next 與iter next不斷返回下乙個元素,知道元素全部返回後出現異常,可以節省記憶體空間。iter是迭代,可以把乙個列表直接轉換成迭代器,然後使用next 方法。data list 1,2,3,4,5 data list iter data list print next da...

Python迭代器與可迭代物件

當掃瞄記憶體中放不下的資料集時,我們需要找到一種惰性獲取資料項的方式,每次 取出 1個。這就是迭代器相對於普通可迭代物件的優勢 節省記憶體 l orange pear 列表就是乙個可迭代物件在python中,很多內建的資料型別都是可迭代物件,如列表,字串,元組,字典,集合等 如果要自己構建乙個可迭代...