1. 程式人生 > >自定義python迭代器

自定義python迭代器

當使用迭代器的資料時,每次從資料流中取一個數據,直到被取完,而且不會重複.

迭代器協議方法主要是__iter__和__next__,在無下一個元素的時候會引發StopIteration異常停止迭代

那麼現在來自定義一個迭代器

class MyIterator:                              #自定義迭代器的類
    def __init__(self,x=2,xmax=100):           #定義構造方法,初始化
        self.__mul,self.__x=x,x
        self.__xmax=xmax

    def __iter__(self):                        #定義迭代器協議方法
        return self
    def __next__(self):                        #定義迭代器協議方法
        if self.__x and self.__x !=1:
            self.__mul *= self.__x             
            if self.__mul <=self.__xmax:
                return  self.__mul             #返回值
            else:
                raise StopIteration            #引發錯誤停止迭代
        else:
            raise  StopIteration

if __name__ == '__main__':
    b=B()
    myiter=MyIterator()
    for i in myiter:
        print("迭代的元素為:",i)

輸出如下

這樣就定義了一個迭代器了,在python裡用__命名變數是私有化命名,在命名方面python也是蠻有意思的,可參看https://blog.csdn.net/warm77/article/details/78353632,搜尋引擎上也有很多,這裡舉一個很有典型的私有成員的例子:

class A(object):
    def __init__(self):
        print("astart")
        self.__private()
        self.public()
    def __private(self):
        print("a.private")
    def pubilc():
        print("a.pbulic")

class B(A):
    def private(self):
        print("Bprivate")

    def public(self):
        print("b public")

b=B()

猜猜輸出了什麼,

a.private
b public

能不能理解呢,這裡就不做更多的拓展了