Python的迭代器协议究竟是什么?

Mar*_*lez 20 python iteration

有客观的定义吗?它是作为python源代码的片段实现的吗?如果是这样,有人可以生成确切的代码行吗?是否所有语言都有自己的'for'语句迭代器协议?

bgp*_*ter 28

它位于这里的文档:

需要为容器对象定义一个方法以提供迭代支持:

container.__iter__()

返回一个迭代器对象.该对象需要支持下面描述的迭代器协议.如果容器支持不同类型的迭代,则可以提供其他方法来专门请求这些迭代类型的迭代器.(支持多种迭代形式的对象的示例是支持广度优先和深度优先遍历的树结构.)此方法对应tp_iter于Python/C API中Python对象的类型结构的槽.

迭代器对象本身需要支持以下两种方法,它们共同构成迭代器协议:

iterator.__iter__()

返回迭代器对象本身.这是允许容器和迭代器与for和in语句一起使用所必需的.此方法对应tp_iter于Python/C API中Python对象的类型结构的槽.

iterator.next()

从容器中返回下一个项目.如果没有其他项,请提高StopIteration异常.此方法对应tp_iternext于Python/C API中Python对象的类型结构的槽.

  • py3中的`next`也是`__next__` (11认同)
  • 如果你添加一个例子,我会投票.;-) (4认同)
  • 从技术上讲,*iterable* 定义 `__iter__` 返回一个 *iterator*;它是定义“__next__”的迭代器。(一个常见的例子是“list”,它是一个可迭代对象,其“__iter__”方法返回“list_iterator”的实例,充当列表的迭代器。没有“list.__next__”方法,只有“list_iterator.__next__” .) (2认同)