迭代器

迭代器规则

  迭代:重复做一些事很多次,就像在循环中那样。

  不仅可以对字典和序列进行迭代,还可以对其他对象进行迭代:只要该对象实现了__iter__方法。

  __iter__方法会返回一个迭代器(iterator),所谓的迭代器就是具有next方法(这个方法在调用时不需要任何参数)的对象。在调用next方法时,迭代器会返回他的下一个值。如果next方法被调用,但迭代器没有值可以返回,就会引发一个StopIteration异常。

  注意:迭代器规则在3.0中有一些变化。在新的规则中,迭代器对象应该实现__next__方法,而不是next。而新的内建函数next方法可以用于访问这个方法。换句话说,next(it)等同于3.0之前版本中的it.next()。

  迭代规则的关键是什么?为什么不使用列表呢?因为列表的杀伤力太大了。如果有一个函数,可以一个接一个地计算值,那么在使用时可能是计算一个值时获取一个值——而不是一次性获取所有值。如果有很多值,列表就会占用太多的内存。但还有其他的理由:使用迭代器更通用,更简单,更优雅。让我们看看一个不使用列表的例子,因为要用的话,列表长度必须无限。

  这里的“列表”是一个斐波那契数列。使用的迭代器如下:

class Fibs:
    def __init__(self):
        self.a = 0
        self.b = 1

    def __next__(self):
        self.a, self.b = self.b, self.a+self.b
        return self.a

    def __iter__(self):
        return self

fibs = Fibs()           # 创建一个斐波那契数列对象
for f in fibs:          # 对数列进行迭代
    if f > 100:
        print(f)
        break
使用迭代器

相关文章: