Getitem vs Iter&下一个。什么时候应该用?

时间:2016-02-27 08:53:26

标签: python iterator containers iterable

我一直在学习python。我的一个问题是我是否应该使用getitemiter& next在Python中创建可迭代的类。

iter& next对我来说似乎更明智,但这就留下了我们应该何时使用getitem的问题。此外,我想我读过某个地方,iternext将被弃用,getitem只会在未来的python版本中得到支持。如何使用iternext支持切片(没有找到太多材料)。

在哪种情况下,使用哪一种比另一种更好?

1 个答案:

答案 0 :(得分:2)

使用__iter__()next()(Python 3中的__next__())来定义迭代器。如果你只想让它成为 iterable __iter__()就足够了(并且必须返回一个迭代器)。请参阅Iterator Types documentation

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

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

这两个协议都将保留,两个协议都不推荐使用。