编程语言
首页 > 编程语言> > 【python】可迭代对象(Iterable)、迭代器(Iterator)、生成器(generator)

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

作者:互联网

一、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