1. 程式人生 > >Python全棧day18(叠代器協議和for循環工作機制)

Python全棧day18(叠代器協議和for循環工作機制)

內部 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循環工作機制)