python3中可迭代对象、迭代器、生成器的区别

开心一刻

       有一个激进分子常常残害基督徒。这一日在街头他杀了几个基督徒后,又抓住一个男子,问道:“你是不是基督徒?”男子道:“幸好我不是。阿门…”“嗯?!”“……阿前一棵葡萄树,阿嫩阿嫩绿滴刚发芽,瓜牛背着那沉重的壳呀……”

写在前面

       最近和同学讨论python3中迭代器和生成器的区别,看了一些博客也是一知半解的,后来通过讨论基本弄明白了两者的区别,同时又把可迭代对象和迭代器、生成器的区别也整理了一下,也怕以后再忘掉,在这里写一篇博客记录一下。

三者简要关系图

可迭代对象
       从上图可知,迭代器一定是可迭代对象,但是可迭代对象不一定是迭代器对象。

迭代器和可迭代对象

直接上结论:
       1)可迭代对象包含迭代器。
       2)如果一个对象拥有__iter__方法,其是可迭代对象;如果一个对象再拥有__next__方法,其是迭代器。
       3)定义可迭代对象,必须实现__iter__方法;定义迭代器,必须实现__iter__和__next__方法。

介绍一下上述两个方法:
(1)iter(self)
       该方法返回的是当前对象的迭代器类的实例。主要有两种写法:
       写法一:返回自身即返回self;
       写法二:返回可迭代对象的迭代器类的实例。
(2)next(self)
       返回迭代的每一步,实现该方法时注意要最后超出边界要抛出StopIteration异常。

生成器

       生成器是一种特殊的迭代器,生成器自动实现了“迭代器协议”(即__iter__和__next__方法),不需要再手动实现两方法。
       生成器在迭代的过程中可以改变当前迭代值(send方法),而修改普通迭代器的当前迭代值往往会发生异常,影响程序的执行。

可迭代对象迭代器生成器
特点对象拥有__iter__方法就是可迭代对象实现了__iter__和__next__方法的就是迭代器对象自动实现__iter__和__next__方法,能通过send方法修改当前迭代的值,是一个特殊的迭代器
使用可多次使用使用一次后如果不重新赋则无法再使用使用一次后如果不重新赋则无法再使用

       可迭代对象和迭代器和生成器还是需要好好理解,掌握它们的特点,就能够正确使用它们。

文中都是我个人的理解,如有错误的地方欢迎下方评论告诉我,我及时更正,大家共同进步

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值