Python教程

【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语句)

 

 

这篇关于【python】可迭代对象(Iterable)、迭代器(Iterator)、生成器(generator)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!