python的迭代器理解

来源:互联网 发布:达内php培训课程 编辑:程序博客网 时间:2024/06/05 19:06

在python中可以使用列表生成式,来生成指定关系的列表元素,同样的在python中有生成器,使用’()’来取代列表生成式中的’[]’,或者在函数中使用yeild的,就可以调用next方法来输出下一个序列的元素,当然这几个方法元素个数都是有限的。在python中可以使用迭代器来不断地获取下一个元素。

在python中像列表这种可以使用for循环遍历其中元素的对象叫做可迭代对象(iterable)。
对于迭代器而言其实需要定义的就是它的next方法,我们可以使用内置的iter()函数让可迭代对象成为一个迭代器。如下

a=[1,2,3,4,5,6,7,8,9,10]a=iter(a)for i in range(10):    print a.next()

但是如果继续使用next方法会出现以下错误。

File "/Users/zyc/PycharmProjects/python1/TEST3.py", line 5, in <module>    print a.next()StopIteration

其实iterator继承自iterable,但是有了自己的next方法,可以调用输出下一个元素的。
iterable需要包含有iter()方法用来返回iterator,而iterator需要包含有next()方法用来被循环。
如果需要自己来定义一个迭代器的话,需要在类里面定义一个 iter() 函数,用它来返回一个带 next() 方法的对象。
比如说斐波拉契的数列可以这样写

class Iterable:    def __iter__(self):        return self    def __init__(self):        self.start = 1        self.pre=[1]    def next(self):        self.pre.append(self.start)        self.start=self.pre[-1]+self.pre[-2]        return self.startI = Iterable()for i in range(10):    print I.next()

然后测试输出数列的前十个数。
但是需要注意的是,迭代器如果可迭代对象是有限的迭代完了就不能再次使用了。

原创粉丝点击