python可迭代对象、迭代器和生成器

本文详细阐述了Python中的可迭代对象和迭代器的概念,强调了两者之间的区别。可迭代对象可以通过__iter__函数生成迭代器,而迭代器则利用__next__函数逐次返回对象的值。生成器作为特殊的迭代器,实现了惰性计算和状态保存。对于迭代工具如for循环,它们首先通过iter函数获取迭代器,然后按顺序遍历。区分这两者的原因在于迭代器只能单次遍历,而可迭代对象可以多次获取值。

        可迭代对象指的是兼容__iter__函数的对象,调动该函数会返回一个生成器,生成器指的是兼容__next__函数的对象,__next__函数会单次获取便利对象的值并返回。

        对于迭代工具,实际上遍历的是迭代器,因此,对于迭代工具(比如for循环),其实际上需要先获取一个迭代器,所以对于可迭代对象,python会先通过iter内置函数作用在可迭代对象上,获取一个迭代器,然后再进行单次遍历(对于已经是生成器的对象,iter函数返回的就是该对象本身),这就是迭代协议。

        为什么需要区分可迭代对象和迭代器,因为迭代器只能进行顺序单次遍历,遍历完后无法再获取对象的值,但是我们对于序列对象,并不仅仅对其单次遍历,需要反复的获取对象的值,而可迭代对象就可以反复获取对象的值,这就是区分可迭代对象和迭代器的意义。

        生成器对象本身含有__next__函数,因此,生成器对象本身也是迭代器。其通过__next__函数实现值的惰性生成和状态挂起。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值