迭代器和生成器的区别?

2020-06-10 09:20发布

25条回答
爱学习的蜗牛
1楼 · 2020-06-10 09:43.采纳回答

迭代器与生成器的区别:
(1)生成器:
生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。
对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。
而且记录了程序执行的上下文。
生成器不仅“记住”了它的数据状态,生成器还记住了程序执行的位置。

(2)迭代器

迭代器是一种支持next()操作的对象。它包含了一组元素,当执行next()操作时,返回其中一个元素。
当所有元素都被返回后,再执行next()报异常—StopIteration
生成器一定是可迭代的,也一定是迭代器对象

(3)区别:
①生成器是生成元素的,迭代器是访问集合元素的一中方式
②迭代输出生成器的内容
③迭代器是一种支持next()操作的对象
④迭代器(iterator):其中iterator对象表示的是一个数据流,可以把它看做一个有序序列,但我们不能提前知道序列的长度,只有通过nex()函数实现需要计算的下一个数据。可以看做生成器的一个子集。


老易
2楼-- · 2020-06-19 11:26
先说迭代器,对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数。在没有后续元素时,next()会抛出一个StopIteration异常,通知for语句循环结束。
生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)。


mrliang
3楼-- · 2020-07-07 09:29

一句话来解释:迭代器是用来访问的有next操作,生成器,肯定是用来生成的啊。加油。

岩岩ing
4楼-- · 2020-07-13 13:42

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


生成器(Generator)是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数
据的时候使用 yield 语句。每次 next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置
和所有的数据值)


小猪丨佩奇home
5楼-- · 2020-07-15 09:24

1、迭代器(iterator)是一个实现了迭代器协议的对象,python的一些内置数据类型(列表,数组,字符串,字典等)都可以通过for语句进行迭代,我们也可以自己创建一个容器,实现了迭代器协议,可以通过for,next方法进行迭代,在迭代的末尾,会引发stopIteration异常。

2、生成器(generator)是通过yield语句快速生成迭代器,可以不用iter和next方法

yield可以使一个普通函数变成一个生成器,并且相应的next()方法返回是yield后的值。一种更直观的解释是:程序执行到yield时会返回结果并暂停,再次调用next时会从上次暂停的地方继续开始执行。

显然,生成器自身有构成一个迭代器,每次迭代时使用一个yield返回 的值,一个生成器中可以有多个yield的值


何大侠
6楼-- · 2020-07-15 15:52

迭代器与生成器的区别:

(1)生成器:

生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。

对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。

而且记录了程序执行的上下文。

生成器不仅“记住”了它的数据状态,生成还记住了程序执行的位置。


区别:

①生成器是生成元素的,迭代器是访问集合元素的一中方式

②迭代输出生成器的内容

③迭代器是一种支持next()操作的对象

④迭代器(iterator):其中iterator对象表示的是一个数据流,可以把它看做一个有序序列,但我们不能提前知道序列的长度,只有通过nex()函数实现需要计算的下一个数据。可以看做生成器的一个子集。


小狮子
7楼-- · 2020-07-22 09:46

迭代器与生成器的2113别:
(1)生成5261器:
生成器本质4102就是一个函数1653,它记住了上一次返回时在函数体中的位置。
对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。
而且记录了程序执行的上下文。
生成器不仅“记住”了它的数据状态,生成器还记住了程序执行的位置。
(2)迭代器
迭代器是一种支持next()操作的对象。它包含了一组元素,当执行next()操作时,返回其中一个元素。
当所有元素都被返回后,再执行next()报异常—StopIteration
生成器一定是可迭代的,也一定是迭代器对象
(3)区别:

①生成器是生成元素的,迭代器是访问集合元素的一中方式

②迭代输出生成器的内容

③迭代器是一种支持next()操作的对象

④迭代器(iterator):其中iterator对象表示的是一个数据流,可以把它看做一个有序序列,但我们不能提前知道序列的长度,只有通过nex()函数实现需要计算的下一个数据。可以看做生成器的一个子集。

蜗牛
8楼-- · 2020-07-22 11:36

1、共同点

  • 生成器是一种特殊的迭代器

2、不同点

a、语法上

  • 生成器是通过函数的形式中调用 yield 或()的形式创建的

  • 迭代器可以通过 iter() 内置函数创建

b、用法上

  • 生成器在调用next()函数或for循环中,所有过程被执行,且返回值

  • 迭代器在调用next()函数或for循环中,所有值被返回,没有其他过程或说动作。


我是大脸猫 - 峡谷钢琴家
9楼-- · 2020-07-30 09:25
对于list、string、tuple、dict等这些容器对象,使用for循环遍历是很方便的。在后台for语句对容器对象调用iter()函数。iter()是Python内置函数。
iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内的元素。next()也是python内置函数。在没有后续元素时,next()会抛出一个StopIteration异常,通知for语句循环结束。