生成器,迭代器,可迭代对象

Posted xuefyre

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成器,迭代器,可迭代对象相关的知识,希望对你有一定的参考价值。

技术分享图片

Python中 list,truple,str,dict这些都可以被迭代,但他们并不是迭代器。

可迭代对象使用iter()函数后就变成了一个迭代器

比如说str类型,它可以迭代,但是他不是一个迭代器,使用iter(str)可以把str类型转换成str_iter类型的迭代器.(同理,list会变成list_iter)

迭代器可以调用next()函数(或者.__next__()方法,效果一致),参数为其本身,获取下一次迭代的值.

 

--------------------------------------------------------------------------------------------------------------------------------------------

生成器:(yield,生产,产生的意思),生成器一定是迭代器,反之不成立.

a = [x*x for x in range(10)] 是列表生成式,返回列表

如果我要生成的列表很大很大,占用内存空间,一次性生成不太现实,那么我就需要使用生成器

a = (x*x for x in range(10))  生成器表达式(generator expression) 

使用next(a)一次只生成一个值

 

生成器可以再函数中加入yield关键字,后面接一变量名实现,把这个函数变成生成器,比如一个实现斐波那契数列的函数,节省内存空间

每次调用这个函数后会执行到yield行,返回变量值.函数停止,下次再调用这个函数会从上次中断的地方继续执行到下个yield处.如此反复.

要注意的是 yield 并没有返回值,如果

temp = yield a

temp一直是为None的

要使yield有返回值,请使用生成器的.send(参数)方法

send()方法不能在还没开始迭代的时候传递non-None参数

 

以上是关于生成器,迭代器,可迭代对象的主要内容,如果未能解决你的问题,请参考以下文章

可迭代对象迭代器生成器的区别

可迭代对象迭代器生成器的区别

迭代器 生成器, 可迭代对象以及应用场景

可迭代对象,迭代器(对象),生成器(对象)

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

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