我一直在学习python。我的一个问题是我是否应该使用getitem
或iter
& next
在Python中创建可迭代的类。
iter
& next
对我来说似乎更明智,但这就留下了我们应该何时使用getitem
的问题。此外,我想我读过某个地方,iter
和next
将被弃用,getitem
只会在未来的python版本中得到支持。如何使用iter
和next
支持切片(没有找到太多材料)。
在哪种情况下,使用哪一种比另一种更好?
答案 0 :(得分:2)
使用__iter__()
和next()
(Python 3中的__next__()
)来定义迭代器。如果你只想让它成为 iterable ,__iter__()
就足够了(并且必须返回一个迭代器)。请参阅Iterator Types documentation。
为了支持旧的有序容器,iter()
函数还将接受同时实现__len__
和__getitem__
的对象;这些记录在Emulating container types下。但是,您无法使用这些方法实现迭代器;对iter()
的调用将生成一个对象,该对象是一个迭代器,然后使用这些方法按顺序访问容器中的项。
并非所有迭代都是有序容器,例如(set
和dict
类型是主要示例)。这些类型可以迭代(产生一个你不应该依赖的依赖于实现的顺序),但是你不能索引每个项目,因为它们不存储在特定的点上。容器
这两个协议都将保留,两个协议都不推荐使用。