若是我們要定義具有迭代器特性的類別 (class) ,我們需要加入 __iter__() 與 __next__() 的定義, __iter__() 回傳 self 本身,而 __next__() 為取得下一個元素的方法 (method) 。
例如以下程式,類別 (class) Fibs 可計算費博納西數列 (Fibonacci series)
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 # 《程式語言教學誌》的範例程式 # http://pydoing.blogspot.com/ # 檔名:iterator.py # 功能:示範 Python 程式 # 作者:張凱慶 # 時間:西元 2010 年 12 月
執行結果如下
__iter__() 就是回傳 self 本身
def __iter__(self): return self
__next__() 取得下一個元素,此例中就是前兩個數字相加
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 |
沒有留言:
張貼留言