python實現設計迭代器指南(含樣例啓發)

本博文源於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)

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