[关闭]
@spiritnotes 2016-07-23T15:18:16.000000Z 字数 976 阅读 1342

Python语言实践分析 -- 迭代器协议

Python DOING


迭代器

所谓的迭代器就是实现了迭代器协议的对象,支持循环遍历的操作

迭代器协议

  1. >>> i = iter([1, 2, 3, 4])
  2. >>> i
  3. <listiterator object at 0x7fd9be17ffd0>
  4. >>> next(i)
  5. 1
  6. >>> next(i)
  7. 2
  8. >>> next(i)
  9. 3
  10. >>> next(i)
  11. 4
  12. >>> next(i)
  13. Traceback (most recent call last):
  14. File "<stdin>", line 1, in <module>
  15. StopIteration

而for循环可以对应为如下代码:

  1. for i in l:
  2. print i
  3. #
  4. iter_ = iter(l)
  5. while True:
  6. try:
  7. tmp = iter_.next() # Python3中为iter_.__next\__()
  8. print tmp
  9. except StopIteration:
  10. break

定义迭代器

当自定义迭代器需要定义如下方法:

iter返回self

可以将对象容器定义和iterator定义合并在一起,这样每次迭代器都是返回同样对象。因此所有的迭代器均是对应的同一个迭代器。

iter返回生成器

可以将iter方法定义为yield语句产生的生成器,这样也就不需要再定义next方法了。并且可以支持多次迭代。

iter返回同类新对象

判断对象是否可迭代多次

如果遇到从API获取的迭代器,而使用者可以需要多其多次迭代,则可以通过其迭代是否唯一进行判断。

  1. assert iter(iterator) is not iter(iterator)

相关库

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注