Jim*_*ard 4 python containers iterator python-3.x
从我的理解,到目前为止,你可以很容易地创建一个迭代器用户定义的简单地下定义对象两者的__iter__方法和__next__它的方法.理解这一点非常直观.
我也知道你可以通过简单地调用该容器上的方法为任何内置容器手动构建迭代器iter().
基本上以任何容器为例,我不明白为什么他们没有__next__为自己定义方法.相反,当iter在容器(ergo,<container>.__iter__)上调用方法时,它返回一个类型的新对象<container_type>_iterator而不是容器本身.
最后,问题是,为什么容器对象将其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'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
161 次 |
| 最近记录: |