一,迭代器
迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完,迭代器只能往前,不能退后。
迭代器有两个基本的方法:iter()和next()
- iter(iterable)从可迭代对象中返回一个迭代器,iterable必须是能提供一个可迭代器的对象
- next(iterator)从迭代器iterator中获取下一记录,如果无法获取下一条记录,则触发stoptrerator异常。
注意:
1. 迭代器只能往前取值,不会后退。
2. 用iter函数可以返回一个可迭代对象的迭代器。
二,生成器
如果一个函数中包括yield关键字,那么这个函数就不再是一个普通函数了,而是传说中的生成器
生成器是一个返回迭代器的函数,只能用于迭代操作,更为简单的理解:生成器就是一个迭代器。
在调用生成器的的运行过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行。调用一个生成器函数,返回的是一个迭代器对象。
生成器的作用:
列表所有数据都在内存中,如果有海量数据的话,就会非常的耗费内存。比如,仅仅需要访问前几个元素,那后面的大多数元素占用的空间都是白白浪费的。
如果列表元素按照某种算法推算出来,那我们就可以在循环过程中不断推断出后面的元素,这样我们就不必创建完整的list,从而节省大量的空间。其实就一句话:我想要得到庞大的数据,又想得到庞大的数据,那就用生成器!
生成器工作原理:
1.生成器能够迭代的关键是它有一个next()方法,通过重复调用next()方法,直到捕获一个异常。
2.可用nest()调用生成器对象来取值,next两种方式t.next()或者next(t)。
3.yield相当于return返回一个值,并且记录这个返回的位置,下次迭代时,代码从yield的下一条语句开始执行。