问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python的迭代器和生成器的区别

发布网友 发布时间:2022-03-31 05:23

我来回答

3个回答

热心网友 时间:2022-03-31 06:52

1、迭代器(iterator)是一个实现了迭代器协议的对象,python的一些内置数据类型(列表,数组,字符串,字典等)都可以通过for语句进行迭代,我们也可以自己创建一个容器,实现了迭代器协议,可以通过for,next方法进行迭代,在迭代的末尾,会引发stopIteration异常。
2、生成器(generator)是通过yield语句快速生成迭代器,可以不用iter和next方法
yield可以使一个普通函数变成一个生成器,并且相应的next()方法返回是yield后的值。一种更直观的解释是:程序执行到yield时会返回结果并暂停,再次调用next时会从上次暂停的地方继续开始执行。
显然,生成器自身有构成一个迭代器,每次迭代时使用一个yield返回 的值,一个生成器中可以有多个yield的值

热心网友 时间:2022-03-31 08:10

Iamlaosong文
我们在用for ... in ...语句循环时,in后面跟随的对象要求是可迭代对象,即可以直接作用于for循环的对象统称为可迭代对象(Iterable),如list、tuple、dict、set、str等。
可迭代对象是实现了__iter__()方法的对象,而迭代器(Iterator)则是实现了__iter__()和__next__()方法的对象,可以显示地获取下一个元素。这种可以被next调用并不断返回下一个值的对象称为迭代器。迭代器一定是可迭代对象,反过来则不一定成立。用iter()函数可以把list、dict、str等Iterable变成Iterator,例如:
bb=[x for x in range(10)]

cc=iter(bb)

cc.next()

循环变量的值其实可以看着是一次次用next取值的过程,每取一个值,做一次处理。list等对象用于循环实际上可以看着是用iter()方法产生一个迭代器,然后循环取值。
生成器(generator)就是一个能返回迭代器的函数,其实就是定义一个迭代算法,可以理解为一个特殊的迭代器。调用这个函数就得到一个迭代器,生成器中的yield相当于一个断点,执行到此返回一个值后暂停,从而实现next取值。

热心网友 时间:2022-03-31 09:45

迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束,迭代器只能往前不会后退。

迭代器有两个基本的方法:iter()和next()。

生成器

在Python中,使用了yield的函数被称为生成器。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值,并在下一次执行next()方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

迭代器与生成器之间的区别:

迭代器是一个更抽象的概念,任何对象,如果它的类有NEXTiter方法返回自己本身,对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台For语言对容器对象条用iter()函数,iter()是Python的内置函数。iter()会返回一个定义了next()方法迭代器对象,在容器中逐个访问容器的元素,next()也是Python的内置函数,next()会抛出StopIteration异常。

生成器是创新迭代器的简单而强大的工具,它们写起来就好像正则函数,只是在需要返回数据的时候使用yield 语句。

迭代器协议,对象需要提供next()方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,终止迭代。

可迭代对象,实现了迭代器协议对象。list、tuple、dict都是Iterable可迭代的对象,但不是Iterator迭代器对象。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
U盘更新专用需要电脑打开怎么让我的U盘和电脑文件夹同步更新啊_百度知 ... 为什么我的硬盘一打开就弹出对话框说选择打开方式. 倒霉的是右键也打... 磁盘右键是打开方式怎么办 我双机盘符总是打开 打开方式 让我选择,右健第一项是打开.不知道是中了... 罗技Lightspeed怎么用? 罗技无线鼠标怎么样?怎么连接电脑使用? 为什么不建议去融资公司上班 融资担保公司一般账务处理及所涉及的会计科目有哪些 月经期间可以游泳吗 经期能不能游泳 晚上睡觉时,常感觉肚脐眼周围隐隐作痛,请问这是... 肚脐右边50毫米处睡觉时疼痛,引起后腰困疼,不能... 我昨晚睡觉的时候还没有什么症状,但是早上一起来... 肚脐右边疼痛怎么回事? 肚脐眼右侧隐痛是怎么回事? 肚脐右侧有隐痛现象是什么原因 肚脐眼右边疼痛是怎么回事 肚脐右边隐痛? 肚脐右边部位隐隐作痛,是什么原因呢? 肚脐右侧平行位置隐隐作痛,是什么病?该怎么检查? 肚脐眼右边一点点隐隐作疼,怎么办? 肚脐右边痛 肚脐右边隐隐作痛是怎么回事啊? 肚脐眼右边痛了2个月了 肚脐眼右边疼痛怎么回事 肚脐右边疼痛是怎么回事? 我有一些蔬菜和肉想知道如何做这些菜 哪些蔬菜具有美白的功效 千岛湖有一种植物表面暗黄色切开后是白色的,吃到... 菜叶上有黄白色的斑点 快手上的照相机是复古该怎么改一下? 快手上录的比较复古,用的什么软件 快手怎么找复古遮阳帽 快手复古模式怎么取消? 快手这样的照片怎么制作? 快手怎么制作照片啊 告诉我呗 为啥我的手机一录快手就是复古如何恢复正常? 手机快手怎么制作照片啊 华为metex和metexs的区别? 华为mtxs多少像素? 华为Mate XS 屏幕分辨率和比例 多少? 平底锅和一般的锅炒菜有什么区别 平底锅和圆底锅炒菜有什么区别? 华为matexs2g运行内存多少钱 华为Mate Xs作为Mate X的继承者,它有哪些耀眼的地... 20cm的平底锅能炒菜吗? 华为Mate Xs什么时候发布? 涂了今黄色的平底锅能用炒菜吗? kGV+加湿器屏幕显示E是什么意思 是不是所有平底锅都适合用电磁炉炒菜?