前篇內容的介紹應該能很容易地讓我們理解掌握Python中的可迭代物件和迭代器(Iterable & Iterator)。本次內容我們來進一步介紹迭代器的相關內容。
在Python中,迭代器(Iterator)物件需要支援以下兩個方法,它們一起構成迭代器協定:
1)__iter__():
物件的該方法傳回迭代器物件本身。這是要求容器和迭代器與for-in語句一起使用所必需的。你也可以使用內建的iter()函數,該函數實質上是在背後呼叫了__iter__()方法的。
2)__next__():
從迭代器傳回下一項。如果沒有其他項,則拋出StopIteration異常。也可以使用內建的next()函數讀取下一項,其實質也是呼叫__next__()方法。
正如我們在前所講過的,列表、元組、字典和集合都是可迭代型別。換句話說,它們是可以從中獲得迭代器的類型。看範例:
程式碼片段清單-01
輸入結果如下:
A B C
在範例程式碼中,我們定義了一個可迭代元組。然後對這個可迭代物件呼叫iter()函數。 iter()函數傳回一個迭代器,我們將其命名為tupIter。然後多次呼叫next()函數。 next()函數每次執行時,都會自動傳回迭代器中的下一個項目。
再看下一段範例程式碼:
程式碼片段-02
運行輸出的結果為:
P y
在上述程式碼清單中,在字串物件上呼叫__ iter__()方法。字串物件實現了迭代器協議,所以字串是包含字元序列的可迭代物件的。直接呼叫__ iter__()方法就可傳回一個迭代器。接著再透過傳回的迭代器呼叫__ next__()方法,就可一個一個輸出迭代器中的元素內容。
一言以蔽之,只要實作了迭代器協定的對象,即可依照上面的兩種方法進行對象的迭代呼叫。
迭代器遍歷
如如我們在前介紹中所看到的,我們使用next()函數(或__next__()方法)手動遍歷迭代器的項目。當next()函數到達迭代器的末端時,就沒有更多的資料要返回,將會得到一個StopIteration異常。
請看範例:
程式碼片段清單-03
執行上述程序,輸出結果類似如下:
10 #20 # #30 Traceback (most recent call last): File ……, in print(next(listIter)) StopIteration |
以上是Python程式設計中的迭代器協定與遍歷方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!