若是我們要定義具有迭代器特性的類別 (class) ,我們需要加入 __iter__() 與 __next__() 的定義, __iter__() 回傳 self 本身,而 __next__() 為取得下一個元素的方法 (method) 。
例如以下程式,類別 (class) Fibs 可計算費博納西數列 (Fibonacci series)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | class Fibs: def __init__( self ): self .i = 0 self .j = 1 def __str__( self ): return str ( self .i) def __iter__( self ): return self def __next__( self ): self .i, self .j = self .j, self .i + self .j return self .i fibs = Fibs() for f in fibs: print (f) if f > 10000 : break # 《程式語言教學誌》的範例程式 # 檔名:iterator.py # 功能:示範 Python 程式 # 作者:張凱慶 # 時間:西元 2010 年 12 月 |
執行結果如下

__iter__() 就是回傳 self 本身
9 10 | def __iter__( self ): return self |
__next__() 取得下一個元素,此例中就是前兩個數字相加
12 13 14 | def __next__( self ): self .i, self .j = self .j, self .i + self .j return self .i |
Fibs 提供的是費伯納西數的迭代計算模式,因此可以很快的計算出費伯納西數列。
中英文術語對照 | |
---|---|
容器 | container |
物件 | object |
元素 | element |
複合資料型態 | compound data type |
迭代器 | iterator |
類別 | class |
費博納西數列 | Fibonacci series |
方法 | method |
類別 | class |
沒有留言:
張貼留言