8.11 迭代器和iter()函数
8.11.1什么是迭代器
迭代器是一组数据类型,可以利用它们的索引从0开始一直“迭代”到序列的最后一个条目。用“计数”的方法迭代序列是很简单的。Python的迭代无缝地支持序列对象,而且它还允许程序员迭代非序列类型,包括用户定义的对象。
8.11.3 如何迭代
根本上讲,迭代器是有一个next()方法的对象。
8.11.6 如何创建迭代器
对一个对象调用iter()就可以得到它的迭代器。
一个实现了_iter_()和next()方法的类可以作为迭代器使用。
8.12 列表解释
map()对所有的列表成员应用一个操作。
filter()基于一个条件表达式过滤列表成员。
lambda允许你快速地创建只有一行的函数对象。
列表解释语法:
[expr for iter_var in iterable if cond_expr]
>>> map(lambda x: x - x % 3, range(100,200,7))
[99, 105, 114, 120, 126, 135, 141, 147, 156, 162, 168, 177, 183, 189, 198]
>>>
>>> filter(lambda x: x%3 == 0, range(100, 200, 10))
[120, 150, 180]
>>>
8.13 生成器表达式
列表解释的一个不足就是必要生成所有的数据,用以创建整个列表。这可能对有大量数据的迭代器有负面效应。生成器表达式通过结合列表解释和生成器解决了这个问题。
生成器表达式并不是真正创建数字列表,而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生”出来,生成器表达式使用了“延迟计算”,所以它在使用内存上更有效。
生成器表达式:
(expr for iter_var in iterable if cond_expr)
>>> for i in (i for i in (1,2,3) if i < 3):
... print i
...
1
2
>>>