为什么使用迭代
|
|
会导致生成一个 1000 个元素的 List
|
|
则不会生成一个 1000 个元素的 List,而是在每次迭代中返回下一个数值,内存空间占用很小.
因为 xrange 不返回 List,而是返回一个 iterable 对象
迭代
迭代是一个实现可迭代对象(实现的是 iter() 方法)和迭代器(实现的是 next() 方法)的过程.
可迭代对象(Iterable):可以直接作⽤于for循环的对象统称为可迭代对象
一个实现了 iter方法的对象是可迭代的对象,该方法返回一个迭代器对象
可迭代对象的三个类型
⼀类是集合数据类型,如list,tuple,dict,set,str等
⼀类是generator,包括⽣成器和带yield的generator function
一类是处于打开状态的files,sockets 也是可迭代对象
可以使⽤isinstance()判断⼀个对象是否是Iterable对象:
迭代器(iterator): 一个实现了next方法的对象
迭代器是一个带状态的对象,返回容器中的下一个值,并为下一次调用next()方法修改状态
可迭代对象是你可以从其获取到一个迭代器的任一对象.迭代器是那些允许你迭代可迭代对象的对象
我们自定义一个迭代器,以斐波那契数列为例:
迭代器就像一个懒加载的工厂,等到有人需要的时候才给它生成值返回,没调用的时候就处于休眠状态等待下一次调用.
迭代器是⼀个可以记住遍历的位置的对象
iter()函数
⽣成器都是Iterator对象,但list,dict,str虽然是Iterable,却不是Iterator
把list,dict,str等Iterable变成Iterator可以使⽤iter()函数
|
|