python迭代器

有时候当我们想逐个获取某些值而不是一次性获取到整个序列的时候(比如列表太大,不适合一次性加载到内存的时候),我们就可以使用迭代器.

什么是迭代器呢?迭代器其实是个协议,就是指实现了__iter__方法的对象,我们把他成为可迭代对象,__iter__方法需要返回一个迭代器,它是包含方法__next__的对象,当我们调用__next__方法的时候,迭代器应该返回其下一个值,如果已经到达最后一个,则跑出StopIteration异常。

通常我们也可以使用next方法来迭代迭代器,next(it)跟it.__next__()相同。

下面以斐波那契数列为例,实现一个迭代器。

 1 class Fib:
 2     def __init__(self):
 3         self.a = 0
 4         self.b = 1
 5 
 6     def __iter__(self):
 7         return self
 8 
 9     def __next__(self):
10         self.a, self.b = self.b, self.a + self.b
11         return self.b

然后创建一个Fib对象,就可以在for循环中使用这个对象,如找出第一个大于100的斐波那契数:

1 fibs = Fib()
2 for f in fibs:
3     if f > 100:
4         print(f)
5         break

也可以使用next(fibs)来往前获取值,迭代器只能往前,不能后退!!!

posted on 2019-02-16 23:25  情怀当饭吃  阅读(97)  评论(0编辑  收藏  举报

导航