0. 阅读目录
1. 迭代器 (Iterator)
特点:- 访问方式(函数,单向):从第一个元素开始,直到所有元素被访问完后结束。
- 统一的访问集合的接口:对象实现__iter__(),则可以使用迭代器访问。常用内建数据结构list\dict\tuple\string\set均支持迭代器。
- 与for循环的索引访问区别:Iterator是唯一访问无法随机访问的数据结构(比如set)的方式。
- 多线程:对可变集合使用Iterator非thread-safe。(可用非可变集合如tuple避免?)
- 延迟计算or惰性求值(Lazy evaluation):迭代器只在迭代至某个元素时才计算该元素。可遍历无限集合。
有关代码:
it = iter(the_list) #获得迭代器对象
it.next() or next(it) #访问下一个元素
enumerate(it) #获得enumerate object,内含索引元组。
遍历到无更多元素时:抛出StopIteration异常
try: while True: print it.next()except StopIteration: pass
2. 生成器 (Generator)
特点:
- 与列表解析(List Comprehension) 极为相似,表达式为:(func(x) for x in the_lst if expression(x))
- 获取生成器的关键词:yield (代替return)
- 可替代大多数map和filter。
有关代码:(import itertools as it_tool)
it_tool.count(s[, step]) #从s开始迭代,以后每个元素加上step(default: 1)
it_tool.cycle(some_struct) #循环迭代某个数据结构内的元素
it_tool.repeat(elem[, n]) #将elem重复n(default: inf)次
3. REFERENCE
http://www.cnblogs.com/huxi/archive/2011/07/01/2095931.html