python_叠代器協議
阿新 • • 發佈:2018-05-02
python python_叠代器協議 叠代器 叠代器協議 一.定義
1.叠代器協議是指:對象必須提供一個next方法,執行方法要麽返回叠代器中的下一項,要麽就引起一個StopIteration異常,以終止叠代(只能往後走,不能往前退)
2.可叠代對象:實現了叠代器協議的對象(實現方式:對象內部定義了一個iter()方法)
3.協議是一種約定,可叠代對象實現了叠代器協議,Python的內部工具(如for循環,sum,min,max函數等)使用叠代器協議訪問對象。
二.叠代器協議的實現
叠代器協議規定了對象必須提供一個next方法和iter方法。作為叠代器協議應用的代表就是for方法,那麽我們如何實現一個類似for功能的類呢?見下圖:
該部分代碼塊如下:
1.叠代器協議是指:對象必須提供一個next方法,執行方法要麽返回叠代器中的下一項,要麽就引起一個StopIteration異常,以終止叠代(只能往後走,不能往前退)
2.可叠代對象:實現了叠代器協議的對象(實現方式:對象內部定義了一個iter()方法)
3.協議是一種約定,可叠代對象實現了叠代器協議,Python的內部工具(如for循環,sum,min,max函數等)使用叠代器協議訪問對象。
二.叠代器協議的實現
叠代器協議規定了對象必須提供一個next方法和iter方法。作為叠代器協議應用的代表就是for方法,那麽我們如何實現一個類似for功能的類呢?見下圖:
該部分代碼塊如下:
class For(): def __init__(self,n): self.n = n def __iter__(self): print("執行了__iter__方法") return self def __next__(self): print("執行了__next__方法") self.n += 1 if self.n >= 16: raise StopIteration("叠代器終止") return self.n f1 = For(10) """ #執行f1.__iter__()和iter(f1)效果完全相同 # f1.__iter__() # iter(f1) #執行f1.__next__()next(f1)效果完全相同 # print(f1.__next__()) # print(next(f1)) """ for i in f1: #先執行iter(f1)---->f1.__iter__() print(i) #執行(next(f1)---->f1.__next__(),直至不滿足條件,拋出異常
其中,上面的next增加了停止條件,且實現的是一個自增1的操作,與range函數功能完全相同。其他的功能應該也是想類似。
三.叠代器與斐波拉契數列的實現
斐波拉契數列是指當前數字是前兩個數字之和,起始兩個數字均為1,例如:1,1,2,3,5,8,13......
該部分的代碼塊如下:
class Fibonacci(): fib = [] def __init__(self,n,m): self.n = n self.m = m self.fib = [] self.fib.append(self.n) self.fib.append(self.m) def __iter__(self): return self def __next__(self): if self.m>=20: raise StopIteration("叠代器停止!!!") self.n,self.m = self.m,(self.n + self.m) self.fib.append(self.m) return self.fib Fib = Fibonacci(2,3) for i in Fib: print(i)
python_叠代器協議