python學習10—迭代器 1. 迭代器協議 對象必須提供一個next方法,執行該方法或者返回迭代中的下一項,或者返回一個StopIteration異常,以終止迭代(只能往後走不能往前退) 2. 可迭代對象 實現了迭代器協議的對象,對象內部定義一個__iter__()方法 3. for迴圈實現機制 ...
python學習10—迭代器
1. 迭代器協議
對象必須提供一個next方法,執行該方法或者返回迭代中的下一項,或者返回一個StopIteration異常,以終止迭代(只能往後走不能往前退)
2. 可迭代對象
實現了迭代器協議的對象,對象內部定義一個__iter__()方法
3. for迴圈實現機制
字元串、列表,元組,字典,集合,文件等都不具有next方法,所以他們都不是可迭代對象(iterable object),但是為什麼for迴圈可以進行呢?
原因:for迴圈首先調用了他們的內置方法__iter()__方法將其轉換為可迭代對象,然後再調用這個轉換後的可迭代對象的__next()__方法,進行迭代。
l = [1,2,3] # iterable object iter_l = l.__iter__() print(iter_l.__next__())
字元串、列表、元組為有序序列,也可以通過索引取值,但是字典、集合、文件等非序列類型,所以出現了for迴圈,一個基於迭代器協議的統一的遍歷方式
4. 使用while迴圈實現for迴圈機制
l = [1,2,3]
detail_l=l.__iter__() while True: try: print(detail_l.__next__()) except StopIteration: print('end of iteration') break