Getitem 与 Iter 和 Next。什么时候应该用什么?
Getitem vs Iter & Next. What should be used when?
我一直在学习python。我的问题之一是我是否应该使用 getitem
或 iter
& next
来使 Python.
中的可迭代 类
iter
& next
对我来说似乎更明智,但这留下了我们什么时候应该使用 getitem
的问题。另外我想我在某处读到 iter
和 next
将被弃用,并且 getitem
将仅在未来的 python 版本中受支持。以及如何使用 iter
和 next
来支持切片(material 还没有找到很多)。
在什么情况下一个比另一个更好用?
使用__iter__()
和next()
(Python3中的__next__()
)定义一个迭代器。如果你只是想让它成为一个 iterable,__iter__()
就足够了(而且必须 return 一个迭代器)。见 Iterator Types documentation.
为了支持传统的 ordered 容器,iter()
函数也将接受同时实现 __len__
和 __getitem__
的对象;这些记录在 Emulating container types 下。但是,您不能使用这些方法实现 iterator;调用 iter()
将生成一个对象,它是一个迭代器,然后使用这些方法按顺序访问容器中的项目。
例如,并非所有可迭代对象都是有序容器(set
和 dict
类型是主要示例)。这些类型可以迭代(产生你不应该依赖的依赖于实现的顺序的结果),但你不能 index 每个项目,因为它们没有存储在特定点容器。
两种协议都将保留下来,没有一种被弃用。
我一直在学习python。我的问题之一是我是否应该使用 getitem
或 iter
& next
来使 Python.
iter
& next
对我来说似乎更明智,但这留下了我们什么时候应该使用 getitem
的问题。另外我想我在某处读到 iter
和 next
将被弃用,并且 getitem
将仅在未来的 python 版本中受支持。以及如何使用 iter
和 next
来支持切片(material 还没有找到很多)。
在什么情况下一个比另一个更好用?
使用__iter__()
和next()
(Python3中的__next__()
)定义一个迭代器。如果你只是想让它成为一个 iterable,__iter__()
就足够了(而且必须 return 一个迭代器)。见 Iterator Types documentation.
为了支持传统的 ordered 容器,iter()
函数也将接受同时实现 __len__
和 __getitem__
的对象;这些记录在 Emulating container types 下。但是,您不能使用这些方法实现 iterator;调用 iter()
将生成一个对象,它是一个迭代器,然后使用这些方法按顺序访问容器中的项目。
例如,并非所有可迭代对象都是有序容器(set
和 dict
类型是主要示例)。这些类型可以迭代(产生你不应该依赖的依赖于实现的顺序的结果),但你不能 index 每个项目,因为它们没有存储在特定点容器。
两种协议都将保留下来,没有一种被弃用。