@spiritnotes
2016-07-23T15:18:16.000000Z
字数 976
阅读 1494
Python
DOING
所谓的迭代器就是实现了迭代器协议的对象,支持循环遍历的操作
>>> i = iter([1, 2, 3, 4])
>>> i
<listiterator object at 0x7fd9be17ffd0>
>>> next(i)
1
>>> next(i)
2
>>> next(i)
3
>>> next(i)
4
>>> next(i)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
而for循环可以对应为如下代码:
for i in l:
print i
#
iter_ = iter(l)
while True:
try:
tmp = iter_.next() # Python3中为iter_.__next\__()
print tmp
except StopIteration:
break
当自定义迭代器需要定义如下方法:
可以将对象容器定义和iterator定义合并在一起,这样每次迭代器都是返回同样对象。因此所有的迭代器均是对应的同一个迭代器。
可以将iter方法定义为yield语句产生的生成器,这样也就不需要再定义next方法了。并且可以支持多次迭代。
如果遇到从API获取的迭代器,而使用者可以需要多其多次迭代,则可以通过其迭代是否唯一进行判断。
assert iter(iterator) is not iter(iterator)