天天看點

006-Python疊代器

先說一些概念性的東西:

可疊代對象:清單、元組、集合、字元串、bytes、bytearray、字典和生成器。

有<code>__iter__</code>的對象叫可疊代對象;有<code>__next__</code>方法的可疊代對象叫疊代器。

可疊代對象可以用在<code>for in</code>語句中;可以使用成員運算符(<code>in</code>,<code>not in</code>)。

<code>iter</code>函數把一個可疊代對象封裝成疊代器。

我們驗證一下上面所說的概念是否正确?那我們就以清單為例:

我們使用<code>iter</code>函數把清單轉換成疊代器:

疊代器是一種封裝。疊代器并非惰性求值,那疊代器有何用途呢?

對于上面的例子,我們完全可以使用周遊清單也可以實作,但是使用清單周遊會占用更多的記憶體。

可疊代對象

疊代器

以菲波那切數列為例,以類的方式實作:

<code>iter</code>函數把可疊代對象轉化為疊代器,<code>next</code>函數從疊代器取出下一個元素。疊代器會儲存一個指針,指向可疊代對象的目前元素。調用<code>next</code>函數的時候,會傳回目前元素,并且把指針指向下一個元素。當沒有下一個元素的時候,會抛出<code>StopIteration</code>異常。

<code>for in</code>循環對于可疊代對象:首先調用<code>iter</code>方法轉化為疊代器,然後不斷的調用<code>next</code>方法,直到抛出<code>StopIteration</code>異常。

版權聲明:原創作品,如需轉載,請注明出處。否則将追究法律責任

本文轉自    bigstone2012   51CTO部落格,原文連結:http://blog.51cto.com/lavenliu/2044715