python: 迭代器 (Iterator)

来源:互联网 发布:mac找不到图片文件夹 编辑:程序博客网 时间:2024/05/24 04:21

概述

迭代器(iterator)是访问集合内元素的一种方式,提供了一种遍历类序列对象的方法。从集合的第一个元素开始访问,直到所有的元素都被访问一遍后结束。对于字典、文件、自定义对象类型等,可以自定义迭代方式,从而实现对这些对象的遍历。总之,迭起器就是定义了对对象进行遍历的方式。

凡是可作用于for循环的对象都是Iterable类型;凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

实验代码

python提供了一个iter函数用来生成迭代器。这个方法有两个参数,当只有一个参数的时候,若这个参数是一个容器,则返回这个容器的迭代器对象,若这个参数本身就是一个迭代器,则返回其自身。

lst = [10, 20, 30, 40]it = iter(lst)print itit2 = iter(it)assert id(it) == id(it2)

for 与 迭代器 的比较:

名称 计数方法 异常情况 优点 缺点 联系 for 通过索引 无 保留了索引 不适合遍历特别巨大的集合 或 无法随机访问的数据结构(比如set) for循环本质上就是通过不断调用next()函数实现的 迭代器 每次迭代指针会指向下一个元素的位置 StopIteration 惰性求值,适合遍历特别巨大的集合 或 无法随机访问的数据结构(比如set) 丢失了索引(但可用enumerate()解决),且不能回退


lst = [10, 20, 30, 40]for x in lst:    pass

等价于:

it = iter([10, 20, 30, 40])while True:    try:        x = next(it) # 或者 x = it.next()    except StopIteration:        break


迭代器enumerate() 相结合:

for idx, ele in enumerate(lst):    print idx, ele


Ref:

  • python黑魔法—迭代器(iterator)
  • Python函数式编程指南(三):迭代器
  • 迭代器


原创粉丝点击