Python之迭代器

本文經過文章同步功能推送至博客園,顯示排版可能會有所錯誤,請見諒!

迭代器指對象提供了一個next方法,執行該方法要麼放回迭代中的下一項,要麼就引發一個Stopitertion錯誤,以終止迭代。 python

可迭代對象則是內部定義了一個__iter__()方法以實現迭代器協議的對象。 從迭代器定義上來,全部迭代器都應有next方法。可迭代對象並不是迭代器,本質上,可迭代對象(如字符串、列表、元組、集合、字典、文件等)內部提供了一個__iter__()方法,使用__iter__()方法能將其轉化爲一個迭代器,進而支持next方法用於迭代。 函數

在python中,for循環、sum、map和filter等函數實質上是使用迭代器協議。如for循環,接受一個可迭代對象,在實際處理時,先使用可迭代對象的__iter__()方法得到一個迭代器,而後在使用next方法迭代,直到返回最後一個值,for內置了處理Stopitertion錯誤的機制。 spa

for i in list(range(101)):
    print(i)

上述for循環簡單模擬處理以下: code

Iter = range(101).__iter__()
while True:
    try:
        i = Iter.__next__()
        print(i)
    except Stopitertion:
        break

迭代器能夠使用3種方式迭代 對象

使用send()方法時,能夠傳入一個值給當前yield blog

知道了迭代器的特性,咱們能夠使用迭代器簡單模擬實現一個列表對象的索引功能! 繼承

class LIST(list):
    '''新建一個LIST類,繼承list類'''
    def find(self,n):
        """find方法用於索引取值"""
        i = 0
        iter = self.__iter__()     #將可迭代對象列表轉爲迭代器賦值給iter
        res = next(iter)           #使用迭代器的next方法
        while i != n:              #當計數器i不等於目標索引n時,使用next迭代
            res = next(iter)
            i += 1
        return res
num_list=LIST(i for i in range(100))       #定義一個LIST類的對象
res = num_list.find(50)            #調用LIST類中的find方法,取得索引號50的值
print(res)    #res = 50
相關文章
相關標籤/搜索