您的位置:首页 > 编程语言 > Python开发

python的迭代器理解

2017-09-20 17:11 106 查看
在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.start
I = Iterable()
for i in range(10):
print I.next()


然后测试输出数列的前十个数。

但是需要注意的是,迭代器如果可迭代对象是有限的迭代完了就不能再次使用了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: