Learning Python : 3. iterator 迭代器

A. 一個類裏面,如果實現了  __iter__ 這個函數, 那這個類就是 “可迭代的”

B. 如果它還實現了 next ( self ) ,那它就稱爲  迭代器


舉一個簡單的例子:

先上代碼:

__metaclass__ = type 
class Fibs() :
    def __init__ ( self ) :
        self.a = 0
        self.b = 1
    def next ( self ) :
        self.a , self.b = self.b , self.a+self.b
        return self
    def __iter__ ( self ) :
        return self 


注意 next 函數 定義了 遞進 的規則 ,並返回 self ( !!! )。

而 __iter__ 則直接返回 self , 源碼裏對於這個是怎麼解釋, 好想知道,求解。 或許哪天得找源碼來看看。


這就定義了一個 迭代器。

然後可以看看它的元素。

fibs = Fibs()
for f in fibs :
    print f.a , 
    if f.a > 30 :
        break

結果是:

lam ~/pycode $ python2 iter.py 
1 1 2 3 5 8 13 21 34

有木有注意到。 第0個元素( init 的 那個 ) 不見了。

所以迭代器不能拿到第0個(初始)的元素,是吧。

不明覺厲,感覺應該是迭代器本身就是通過 next 來拿到元素, 初始元素當然拿不到。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章