迭代 Iteration
使用for循环来遍历list或者tuple,这种遍历就是迭代,遍历的list或者tuple称为可迭代对象Iterable
列表生成式
列表中,直接写表达式,生成相对应的列表
>>> [ x + 1 for x in range(10)]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
生成器 Generator
python中,一边循环一边计算的机制,就叫生成器,创建生成器generator的方法:将列表生成式中括号改用括号即可。生成器会每次输出一个,可以调用next(obj)来输出
>>> a =( x + 1 for x in range(10))
>>> next(a)
1
迭代器 Iterator
可以用next(obj)来调用,并不断返回下一个值的对象,都是迭代器:Iterator
迭代器是一个数据流,可以调用并返回下一次的值,直到没有值时,抛出StopIteration异常。可以提高性能,节省内存空间。
还有一种使用yield来产生迭代器的方式,简单的方式,就是在for循环中,可以用到print打印输出的地方,换成yield就变成了迭代器。
特点:
- next(Iterator)来调用
- 每次调用后,返回下一次的值
- 两种创建方式: 列表生成式中括号改括号;使用yield(相当于替代print打印输出)创建的函数
- 因为是一边循环,一边推断后边的值,所以能很大的提高性能,而不会因为数据量大,占用大量的内存空间。
总结
- 凡是可以用for循环来遍历的,都是可迭代的,主要是一些集合,包括list, tuple, dict, str等
- 凡是可以作用于next()函数的对象都是迭代器Iterator,比如生成器generator (列表生成式的中括号改成括号即可),还有使用yield的函数也是迭代器,每次需要用next(obj)来返回值。
- list、tuple等集合类型是iterable, 但不是Iterator。但可以用iter(list)将可迭代对象转换成迭代器。
- python的for循环,本质上就是不断的调用next()来实现遍历的。