迭代器和for迴圈機制

2021-09-01 12:56:15 字數 1379 閱讀 2806

什麼是遞迴,之前舉過乙個問路的例子,a問b,b問c,c問d 最後乙個乙個的返回結果,這叫遞迴

什麼是迭代,每次結果都是依賴於上一次結果為迭代,問路例子,a問b,b讓a去問c,a去問c,c讓a去問d,就是這樣

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

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

python當中一切皆物件,python當中所有的資料型別只要遵循迭代器協議去生成的,那他就是可迭代物件

(字串、列表、元祖、字典、雞盒、檔案物件)這些都不是可迭代物件,只是for迴圈呼叫了他們內部的__iter__方法,把它們變成了可迭代物件,跟索引沒有關係

q =[1

,2,3

,4]w = q.__iter__(

)#轉換成可迭代物件,並賦值給w

print

(w)print

(w.__next__())

#遵循了迭代器協議就一定會有乙個next方法,就可以取列表了

print

(w.__next__())

print

(w.__next__())

print

(w.__next__(

))

如果多列印乙個就會報stopitertion錯誤,但是for迴圈捕捉到了這個錯誤就意味著已經取完了,不再繼續迭代了

q =[1

,2,3

]w = q.__iter__(

)while

true

:try

:#異常捕捉,之後會說

print

(w.__next__())

except stopiteration:

print

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

)break

關於記憶體問題比如說將乙個物件變成迭代器形式,迭代器和之前的物件完全是兩個不同的東西,所以迭代器佔的記憶體很小

a =

['father'

,'son'

,'sunzi'

,'hahaha'

]z = a.__iter__(

)#z就是乙個迭代器

print

(z.__next__())

#取第一次

print

(z.__next__())

#取第二次

print

(next

(z))

#取第三次

next是python內建的,__next__是資料型別內建的,兩個方法是一樣的

迭代器協議和for迴圈機制

一 什麼是迭代和遞迴 迭代和遞迴都是迴圈的一種。簡單地說,遞迴是重複呼叫函式自身實現迴圈。迭代是函式內某段 實現迴圈,而迭代與普通迴圈的區別是 迴圈 中參與運算的變數同時是儲存結果的變數,當前儲存的結果作為下一次迴圈計算的初始值。迭代器是訪問集合元素的一種方式。迭代器物件從集合的第乙個元素開始訪問,...

python中的for迴圈(迭代器機制)

python中的for迴圈 1 x hello 2 for i in x iter x x.iter 3 print i iter x.next iter l x.iter 遵循迭代器協議,生成可迭代物件 print iter l.next for迴圈和索引沒關係 基於迭代器機制 對列表的索引 超出...

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

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