迭代器 与 生成器

到底什么是迭代器 生成器呢?

首先先说几个名词:

迭代(iteration):迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。称为迭代iterration 类似于遍历。数学上面的定义:迭代公式就是指用现在的值,代到一个公式里面,算出下一个值,再用下一个值代入公式,如此往复地代。

迭代对象(iterable):可以被for循环的对象就是可迭代对象,具有__iter__方法不具备__next__方法。

迭代器:(iterator):可以被next()函数调用并且不断返回下一个值的对象称为迭代器,如果没有下一个值,当迭代到空值时会抛出个异常

迭代器具备__iter__()和__next__()方法。

for循环的内部其实就是先调用_iter_()方法把iterable转换成iterator在进行循环遍历的。

自己定义迭代器,只需要在类里面加上个_iter_函数就行了,用它来返回一个带_next_方法的对象就行了。
class Iterable:
    def __iter__(self):
        return self
def __init__(self):
    self.start=-1
def __next__(self):
    self.start +=2
    if self.start >10:
        raise StopIteration
    return self.start

I = Iterable()
for i in I:
    print(i)

生成器:

生成器就是一种迭代器。生成器拥有next方法并且行为与迭代器完全相同,这意味着生成器也可以用于Python的for循环中。

一个具备了yield语句的函数就是生成器。生成器就是一种迭代器,相对迭代器书写来说生成器更为简单。

生成器的特点:

生成器是一个函数,而且函数的参数都会保留。迭代到下一次的调用时,所使用的参数都是第一次所保留下的,即是说,在整个所有函数调用的参数都是第一次所调用时

保留的,而不是新创建的。

yeild 生成器的运行机制:

当你问生成器要一个数时,生成器会执行,直至出现 yield 语句,生成器把 

yield 的参数给你,之后生成器就不会往下继续运行。 当你问他要下一个数时,他会从上次的状态。开始运行,直至出现yield语句,把参数给你,之后停下。如此反复

生成器函数yield返回参数是返回的是一个对象,要想取值,需要调用next()方法。


迭代器与生成器之间的区别:

生成器能做到迭代器所有的事而且更加简单,更加高效,使用生成器表达式取代列解析式可以节省内存,当程序终结时会抛出异常StopIteration

通过使用生成器的语法,可以免去写迭代器类的繁琐代码

使用deepcopy()函数可以复制迭代器~~~


本人是小白一个,如果有说错的地方希望大家多多指教!我一定虚心学习!









  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值