python可迭代物件和迭代器
阿新 • • 發佈:2019-02-17
1. iter函式
iter 函式只是呼叫物件的__iter__
方法,這個方法按照協議會返回一個迭代器,使得for迴圈這樣的語法結構能夠進行下去。
2. 可迭代物件
一個物件實現了__iter__方法,就是可迭代的,可以使用for迴圈訪問物件中的每個元素,其實質是呼叫iter函式使物件返回一個迭代器,再使用迭代器進行迴圈。
3. 迭代器:實現了__next__()方法,呼叫該方法時,直到物件沒有可呼叫的元素就返回異常StopIteration
示例:自定義迭代器返回斐波那契數列>>> st = 'Hello' >>> for i in st: ... print(i) ... H e l l o >>> next(st) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object is not an iterator >>> st = iter(st) >>> next(st) 'H' >>> next(st) 'e' >>> next(st) 'l' >>> next(st) 'l' >>> next(st) 'o' >>> next(st) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
>>> class Fibs: ... def __init__(self,n=10): ... self.a = 0 ... self.b = 1 ... self.n = n ... def __iter__(self): ... return self ... def __next__(self): ... self.a,self.b = self.b,self.a+self.b ... if self.a > self.n: ... raise StopIteration ... else: ... return self.a ... >>> f = Fibs(20) >>> for i in f: ... print(i) ... 1 1 2 3 5 8 13