迭代器協議和for迴圈機制

2021-08-20 12:21:39 字數 1555 閱讀 1160

一、什麼是迭代和遞迴

迭代和遞迴都是迴圈的一種。

簡單地說,遞迴是重複呼叫函式自身實現迴圈。迭代是函式內某段**實現迴圈,而迭代與普通迴圈的區別是:迴圈**中參與運算的變數同時是儲存結果的變數,當前儲存的結果作為下一次迴圈計算的初始值。

迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退,不過這也沒什麼,因為人們很少在迭代途中往後退。另外,迭代器的一大優點是不要求事先準備好整個迭代過程中所有的元素。迭代器僅僅在迭代到某個元素時才計算該元素,而在這之前或之後,元素可以不存在或者被銷毀。這個特點使得它特別適合用於遍歷一些巨大的或是無限的集合,比如幾個g的檔案

特點:訪問者不需要關心迭代器內部的結構,僅需通過next()方法不斷去取下乙個內容

不能隨機訪問集合中的某個值 ,只能從頭到尾依次訪問

訪問到一半時不能往回退

便於迴圈比較大的資料集合,節省記憶體

二、什麼是迭代器協議

2、可迭代物件,實現了迭代器協議的物件(如何實現:物件內部定義乙個__iter__()方法)

3、協議是一種約定,可迭代物件實現了迭代器協議,python內部工具(如:for,sum,min,max函式等)使用迭代器訪問物件。

ps:(字串,列表,元組,字典,集合,檔案物件)這些都不是可迭代物件,只不過for迴圈呼叫了他們內部的__iter__()方法,把他們變成了可迭代物件

x = 'hello'

iter_test = x.__iter__()

print(iter_test)

print(iter_test.__next__())

print(iter_test.__next__())

print(iter_test.__next__())he

l

如果取完了,還繼續迭代會報錯stopiteration

檔案也是使用這種方法轉換成可迭代物件。

f=open('test.txt','r+')

iter_f=f.__iter__()

print(iter_f.__next__())

print(iter_f.__next__())

使用while去模擬for迴圈的所作的事情

x = 'hello'

diedai_str = x.__iter__()

while true:

try:

print(diedai_str.__next__())

except stopiteration:

print('迭代完畢,迴圈終止')

breakhe

llo迭代完畢,迴圈終止

以上可以使用內建函式next進行操作

x = 'hello'

diedai_str = x.__iter__()

print(next(diedai_str))

print(next(diedai_str))

print(next(diedai_str))

迭代器協議和for迴圈工作機制

一,1.迭代器協議 物件必須提供乙個next方法,執行該方法要麼返回迭代中的下一項,要麼就引起乙個stoplteration異常,以終止迭代,只能往後走,不能往前退。可迭代物件 實現了迭代器協議的物件 例子 l 1,2,3 iter text l.iter 遵循迭代器協議,生成可迭代物件 print...

迭代器協議和for迴圈工作機制

舉個例子 遞迴 假如我去問路,路人甲看我長得盛世容顏,但是他不知道,他就去幫我問路人乙去了,路人乙跟路人甲說我也不知道,但一看路人甲美若天仙,就說,我去幫你問問路人丙,完了可能得到答案 迭代 依然是問路,我去問路人甲,路人甲一看我長得車禍現場,就說我不知道,你去問問路人乙去吧。2.可迭代物件 實現了...

day18 迭代器協議和for迴圈工作機制

迭代器協議 物件必須提供乙個next方法,執行方法要麼返回迭代器中的下一項,要麼就引起乙個stopiteration異常,以終止迭代 只能往後走,不能往前退 可迭代物件 實現了迭代器協議的物件 實現方式 物件內部定義了乙個iter 方法 協議是一種約定,可迭代物件實現了迭代器協議,python的內部...