ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【python】可迭代对象(Iterable)、迭代器(Iterator)、生成器(generator)

2022-06-11 13:35:42  阅读:178  来源: 互联网

标签:__ 迭代 Iterator 对象 生成器 iter 方法


一、python中一切皆对象,那么“可迭代”对象与普通对象有什么区别呢?

实现了__iter__方法的对象即为可迭代对象,str  list  tuple  dict  set 都是可迭代的,可以通过判断对象是否有__iter__属性来判断该对象是否是可迭代对象,如下:

 

 

二、可迭代对象的__iter__方法的作用是什么?

可迭代对象的__iter__方法的作用是返回一个迭代器对象。在使用for循环对可迭代对象进行迭代操作时,实际上是:调用__iter__方法,返回迭代器对象,这个迭代器对象不断的调用__next__方法返回元素,直到没有元素可以返回时抛出StopIteration异常。

三、可迭代对象如何转成迭代器?

iter(可迭代对象)

四、什么是迭代器?

实现了__iter__方法和__next__方法的对象都是迭代器对象。__iter__方法返回迭代器自身,即self,__next__方法返回下一个值,直至没有下一个元素可以返回时,抛出StopIteration异常。

五、可迭代对象和迭代器对象中都要实现__iter__方法,那么这两者的__iter__方法的区别是什么?

可迭代对象的__iter__方法是返回一个迭代器对象,通过这个迭代器对象完成迭代。迭代器对象的__iter__方法是返回它自身即self,与其__next__方法共同完成迭代。这也就是可迭代对象可以多次迭代,但是迭代器对象只能迭代一次的原因。

六、使用for循环迭代迭代器时,执行过程是怎样的?

在for开始迭代前,会自动调用迭代器的__iter__方法,获取迭代器对象,然后自动调用__next__方法开始迭代。如下:

 

 

 

七、什么是生成器?

生成器是一种特殊的迭代器,不过这种迭代器更加优雅,不需要实现__iter__方法和__next__方法,而是通过关键字 yield 即可实现快速、便捷的创建一个迭代器。

八、生成器的语法?

类似函数的定义,但不返回值。为了显示序列中每一个元素,会使用 yield 语句。只要函数的定义体中有 yield 关键字,那么该函数就是生成器函数。调用生成器函数时,不会执行函数的内容,而是返回一个生成器对象。如下:

 

 

九、既然生成器函数没有返回值,那么该如何去访问他的元素呢?

获取生成器函数返回的生成器对象,对该对象进行迭代操作。如下:

 

十、生成器表达式?

简单的生成器函数,可以替换成生成器表达式。生成器表达式可以理解为列表推导式的惰性版本,即不会马上构建列表,而是返回一个生成器对象,按需惰性生成元素。

生成器表达式格式:(对每次迭代的元素的操作 for语句)

 

 

标签:__,迭代,Iterator,对象,生成器,iter,方法
来源: https://www.cnblogs.com/panpanda/p/16356406.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有