迭代器可以讓我們訪問集合的時候變得非常方便。之前我們通過for...in...
的方式訪問乙個集合的時候,就是使用迭代器完成的。如果沒有迭代器,那麼我們只能通過while
迴圈,每次迴圈的時候通過下標訪問了。
可以直接使用for
迴圈遍歷的物件,成為可迭代的物件,常見的可迭代的物件有:list
、tuple
、dict
、set
、str
以及生成器。
更加專業的判斷乙個物件是否是可迭代的物件是:這個物件有乙個__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中,很多內建的資料型別都是可迭代物件,如列表,字串,元組,字典,集合等 如果要自己構建乙個可迭代...