根据我目前的理解,您可以通过简单地定义两者 __iter__
来轻松地为用户定义 对象创建迭代器。方法和 __next__
它的方法。这是非常直观的理解。
我还了解到,您可以通过简单地调用 iter()
为任何内置 容器手动构建迭代器。该容器上的方法。
基本上以任何容器为例,我不明白的是为什么他们不定义 __next__
自己的方法。相反,在调用 iter
时容器上的方法 (ergo, <container>.__iter__
) 它返回类型为 <container_type>_iterator
的新对象而不是容器本身。
最后,问题是,为什么容器对象委托(delegate)它们的 iterator
功能分离 <type>_iterator
对象而不是自己定义它?
最佳答案
如果容器是它自己的迭代器(例如提供了一个 __next__
方法),您只能在一个地方对其进行迭代。你不能有独立的迭代器。每次调用 __next__
都会给出容器中的下一个值,您将无法返回到第一个值;你实际上有一个生成器,它只能在容器中生成一次值。
通过为给定容器创建单独的迭代器,您可以独立迭代:
>>> lst = ['foo', 'bar', 'baz']
>>> it1 = iter(lst)
>>> it2 = iter(lst)
>>> next(it1)
'foo'
>>> next(it2)
'foo'
>>> list(it1)
['bar', 'baz']
>>> next(it2)
'bar'
关于python - 内置容器的迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186651/