python的迭代器理解

在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()

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值