自定義python迭代器
阿新 • • 發佈:2019-01-22
當使用迭代器的資料時,每次從資料流中取一個數據,直到被取完,而且不會重複.
迭代器協議方法主要是__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
能不能理解呢,這裡就不做更多的拓展了