Python全棧day18(叠代器協議和for循環工作機制)
阿新 • • 發佈:2018-01-15
內部 highlight next 計算 內置函數 如何 異常 初始 一次循環
一,什麽是叠代和遞歸
遞歸和叠代都是循環的一種。
簡單地說,遞歸是重復調用函數自身實現循環。叠代是函數內某段代碼實現循環,而叠代與普通循環的區別是:循環代碼中參與運算的變量同時是保存結果的變量,當前保存的結果作為下一次循環計算的初始值。
二,什麽是叠代器協議
1.叠代器協議是指:對象必須提供一個next方法,執行該方法要麽返回叠代中的下一項,要麽就引起一個StopIteration異常,以終止叠代 (只能往後走不能往前退)
2.可叠代對象:實現了叠代器協議的對象(如何實現:對象內部定義一個__iter__()方法)
3.協議是一種約定,可叠代對象實現了叠代器協議,python的內部工具(如for循環,sum,min,max函數等)使用叠代器協議訪問對象。
PS:(字符串,列表,元祖,字典,集合,文件對象)這些都不是可叠代對象,只不過在for循環,調用了他們內部的__iter__方法,把他們變成了可叠代對象6
列子 day18-2.py
x=‘hello‘ iter_test=x.__iter__() print(iter_test) print(iter_test.__next__()) print(iter_test.__next__()) print(iter_test.__next__()) print(iter_test.__next__()) print(iter_test.__next__()) <str_iterator object at 0x000002E0DA335978> h e l l o
如果取完了還繼續叠代會報錯StopIteration
文件也是使用這種方法轉換成可叠代對象
f=open(‘test.txt‘,‘r+‘) iter_f=f.__iter__() print(iter_f.__next__()) print(iter_f.__next__())
使用while取模擬for循環做的事情
l=[1,2,3] diedai_l=l.__iter__() while True: try: print(diedai_l.__next__()) except StopIteration: print(‘叠代完畢,循環終止‘) break 1 2 3 叠代完畢,循環終止
以上可以使用內置函數next進行操作day18-4.py
l = [1,2,3,4] iter_l=l.__iter__() print(next(iter_l))
1
Python全棧day18(叠代器協議和for循環工作機制)