本博文源於python基礎,旨在實現如何完成一個迭代器。首先大家不要對迭代器感到陌生。迭代器就是for能遍歷的對象,而且需要大家懂一點面向對象的知識,這是基礎。
迭代器必備兩種屬性
大家在自己設計迭代器的時候,一定要遵守迭代器協議。所謂迭代器協議就是要有兩個屬性
前者返回對象本身,它是for語句使用迭代器的要求
後者返回容器中下一個元素或數據。當容器中的數據用盡時,應該引發StopIteration異常。
任何一個類,只要它實現了或具有這兩個方法,就可以稱其爲迭代器,也可以說是可以迭代的。在使用它作爲迭代器時,就可以用for來遍歷:
for item in iterator:
pass
手動實現__iter__
剛纔我們上面說了__iter__是指對象本身,那麼我們在設計的時候用類構造,然後在類中定義該iter方法就行了。定義好方法,寫些什麼語句呢?根據公約返回對象本身,因此可以這樣寫
def __iter__(self):
return self
手動實現__next__
也就是返回下一個元素或數據,你是想讓數據怎樣的操作呢,是兩倍或者三倍還是平方都是可以自己選擇。在這個方法中,就需要腦洞大開,根據自己的業務需求實施了,這裏就來一個是容器的兩倍next
def __next__(self):
if self.__x and self.__x != 1:
self.__mul *= self.__x
代碼友好性須知
作爲類要有__init__
這個初始化是類的標準素養,默認屬性更加友好喲!
作爲迭代器到了迭代結束拋出異常喲!
這個有StopIteration異常可以設置
下面就來看一下樣例啓發一下思路吧!
例子:自定義一個迭代器實現2的n次方值,最大不超過100
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__':
myiter = MyIterator()
for i in myiter:
print('迭代的數據元素:',i)