先说一些概念性的东西:
可迭代对象:列表、元组、集合、字符串、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