生成器,迭代器,可迭代对象
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参数
以上是关于生成器,迭代器,可迭代对象的主要内容,如果未能解决你的问题,请参考以下文章