python--006--迭代器協議和for循環工做機制

1. 迭代器協議和for循環工做機制python

 

 

 

定義
1)迭代器協議是指:對象必須提供一個next方法,執行該方法要麼返回迭代中的下一項,要麼就引發一個stopIteration異常,已終止迭代(只能日後不能往前退)。
2)可迭代對象:實現了迭代器協議的對象(如何實現:對象內部定義一個__iter__()方法)
3)協議是一種約定,可迭代對象實現了迭代器協議,python的內部工具(如for循環,sum,min,max函數等)使用迭代器協議訪問對象。函數

for循環機制
for循環本質:循環全部對象,全都是使用迭代器協議
注:(字符串、列表、元組、字典、集合、文件對象)這些都不是可迭代對象,只不過在for循環,調用了他們內部的__iter__方法,把他們變成了可迭代對象
而後for循環調用可迭代對象的__next__方法去取值,並且for循環會捕捉StopIteration異常,以終止迭代工具

str = "hello"
for i in str:
    print(i)

iter_test = str.__iter__()
print(iter_test)
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
print(iter_test.__next__())
# print(iter_test.__next__())

l = [1, 2, 3]
for i in l:   # for循環實際上執行的就是這兩步:i_l = l.__inter__() i_l.__next__()
    print(i)


爲什麼要有for循環
序列類型 像列表、字符串等都有下標,用下標方式遍歷沒有問題,但若是是非序列類型的字典、集合、文件對象就不適用了。而for循環就是基於迭代器協議提供一個統一的可比遍歷全部對象的方法,在遍歷以前調用對象的__iter__()方法將其轉換成一個迭代器,而後適用迭代器協議去實現循環訪問,這樣全部的對象就能夠經過for循環來遍歷了。學習

 

next()函數:就至關於執行iter_l.__next__()spa

l=['die','erzi','sunzi','chongsunzi']
iter_l=l.__iter__()
print(next(iter_l))  #next()--就至關於-->iter_l.__next__()

 

 

 

 看視頻,作筆記,堅持學習code

相關文章
相關標籤/搜索