迭代器是什么?生成器是什么?两者有什么区别?

1.迭代器是什么?

首先,我们需要想理解容器什么。这里的容器指定并不是云计算中的容器,实际上,我们可以认为,容器就是将多个元素在一起的单元,并且,是可以迭代的,可以遍历容器内部的对象的。看到这里,会不会觉得挺熟悉的?没错,列表,元组,字典这些都是容器。
理解完容器是什么,再来看看什么是迭代器。只要定义了__next__() (python3的操作)或next() (python2的操作)),他就是一个迭代器。迭代器可以用于迭代操作,将我们容器中的每一个对象迭代获取。
迭代器可以看作使用for循环对容器进行遍历。那迭代器最主要的优点又是什么呢?
比如:我们定义一个列表,是从1到10000的,显然这么大的数据量会占用我们一定的内存,而当我们仅需要对1到10000进行遍历时,列表占用这么大的内存实属浪费。我们可以用迭代器的方法,对列表使用iter()的方法生成一个迭代器,迭代器并没有一次性把所有元素都加载到内存里,而是以一种延迟计算的方式来返回元素(等到使用__next__时才返回)这样,占用空间就会大大减小,这正是他的一大优点。

2.生成器是什么?

生成器可以理解为特殊的迭代器。但其相比与迭代器,占用的内存更少。他本质上是一个函数,只不过函数的return改为了yield语句,正常的for循环语句,会不停的遍历容器的对象,然后返回(如果有return的话),当我们用yield取而代之,我们便可以对函数进行挂起操作,也就是说,每当函数执行时遇到yield时,他会记住此时的一个位置并挂起,等到使用__next__操作时,才由上一次挂起的位置继续执行。

3.总结两者的区别

迭代器,在创建的时候已经生成,在需要的时候再去操作迭代器加载元素到内存中,而生成器,本质是一个可以暂时挂起的函数,等到需要时再继续执行去生成元素,这样子,使得生成器比迭代器更省内存。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值