補8.python之面向對象(經過__iter__,__next__實現迭代器協議)附帶斐波那契數列實現

在前面講迭代器和生成器原理的時候,就已經說過__iter__方法和__next__方法的做用了,在這裏就不作重複描述了。ide

在這補一個實現迭代器協議的例子。it

例1:(在沒有拋出StopIteration這個異常以前,這個迭代器會無限的生成值)io

class c1:class

    def __init__(self,start):原理

        self.start = start迭代器

    def __iter__(self):方法

        return selfnext

    def next(self):協議

        self.start += 1生成器

        return self.start

o1 = c1(10)

for i in o1:

    print i


例2:(拋出stopiteration異常以後)

class c1:

    def __init__(self,start,stop):

        self.start = start

        self.stop = stop

    def __iter__(self):

        return self

    def next(self):

        if self.start >= self.stop:

            raise StopIteration

        n = self.start

        self.start += 1

        return n

o1 = c1(1,10)

for i in o1:

    print i

輸出:

1

2

3

4

5

6

7

8

9


斐波那契數列:

class Fib:

    def __init__(self):

        self._a=0

        self._b=1

    def __iter__(self):

        return self

    def __next__(self):

        self._a,self._b=self._b,self._a + self._b

        return self._a

f1=Fib()

相關文章
相關標籤/搜索