1. 程式人生 > >python的叠代器

python的叠代器

com 序列 位置 sta python stop 出現 一點 異常

叠代是指能夠從序列中訪問出素的一種方式,在我們遍歷使用for...in...的對象都是可叠代對象。這裏需要補充一點的是python中一切都是對象。

判斷一個對象是否是可叠代對象可以通過instance函數:

技術分享

像我們常用的列表,字典,字符串,集合,元組都是可叠代對象。 

那麽我們是否可以自定義一個可叠代對象呢,答案是肯定的。

其實可叠代對象本質上是需要一個中間者即叠代器來幫助可叠代對象記錄當前遍歷的位置即下標,並且返回遍歷出來的。而__iter__()方法就是用來返回一個叠代器,即my_iteration對象。通過next(my_iteration)獲取下個元素。

那麽返回了一個叠代器以後是如何取出遍歷元素的呢,實際上for..in...先調用了可叠代對象中的__iter__方法來獲得一個叠代器,然後用調用next來不斷獲取下一個值,直到沒有返回值。當用next不斷獲取直到沒有值可以獲取的時候會拋出StopIteration異常。因為for..in..自動捕獲了這個異常並pass了,所以遍歷的過程不會出現異常。

因此,一個對象擁有__iter__方法就是一個可叠代對象,擁有__iter__和__next__方法就是一個叠代器。

那麽叠代器具體有什麽作用呢,這裏編寫一個能夠生成斐波那契數列的叠代器為例。

技術分享

python的叠代器