python之迭代器与生成器

一,迭代器

迭代器是一个可以记住遍历的位置的对象.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完,迭代器只能往前,不能退后。

迭代器有两个基本的方法: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的下一条语句开始执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值