Getitem 与 Iter 和 Next。什么时候应该用什么?

Getitem vs Iter & Next. What should be used when?

我一直在学习python。我的问题之一是我是否应该使用 getitemiter & next 来使 Python.

中的可迭代 类

iter & next 对我来说似乎更明智,但这留下了我们什么时候应该使用 getitem 的问题。另外我想我在某处读到 iternext 将被弃用,并且 getitem 将仅在未来的 python 版本中受支持。以及如何使用 iternext 来支持切片(material 还没有找到很多)。

在什么情况下一个比另一个更好用?

使用__iter__()next()(Python3中的__next__())定义一个迭代器。如果你只是想让它成为一个 iterable__iter__() 就足够了(而且必须 return 一个迭代器)。见 Iterator Types documentation.

为了支持传统的 ordered 容器,iter() 函数也将接受同时实现 __len____getitem__ 的对象;这些记录在 Emulating container types 下。但是,您不能使用这些方法实现 iterator;调用 iter() 将生成一个对象,它是一个迭代器,然后使用这些方法按顺序访问容器中的项目。

例如,并非所有可迭代对象都是有序容器(setdict 类型是主要示例)。这些类型可以迭代(产生你不应该依赖的依赖于实现的顺序的结果),但你不能 index 每个项目,因为它们没有存储在特定点容器。

两种协议都将保留下来,没有一种被弃用。