构建一个基本的Python迭代器

  • 问题:
  • 如何在python中创建迭代函数(或迭代器对象)?在

  • 答案:
  • python中的Iterator对象符合Iterator协议,这基本上意味着它们提供了两个方法:\uuiter\\\/code>和。在

    返回迭代器对象并被隐式调用

    方法返回下一个值,并在每次循环增量时隐式调用。当没有更多值可返回时,此方法引发StopIteration异常,该异常由循环构造隐式捕获以停止迭代

    下面是一个简单的计数器示例:

    class Counter:
    def __init__(self, low, high):
    self.current = low - 1
    self.high = high

    def __iter__(self):
    return self

    def __next__(self): # Python 2: def next(self)
    self.current += 1
    if self.current < self.high:
    return self.current
    raise StopIteration


    for c in Counter(3, 9):
    print(c)

    这将打印:

    3
    4
    5
    6
    7
    8

    如前面的回答所述,使用生成器更容易编写:

    def counter(low, high):
    current = low
    while current < high:
    yield current
    current += 1

    for c in counter(3, 9):
    print(c)

    打印输出将是相同的。在幕后,generator对象支持迭代器协议,并执行与类计数器大致相似的操作

    David Mertz's Article,Iterators and Simple Generators,是一个很好的介绍。在