所有栏目

迭代器和生成器的区别

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

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

    区别:生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常

    2023-10-24 02:32:51
  • 迭代器与生成器的区别:

    (1)生成器:

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

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

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

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

    (2)迭代器

    迭代器是一种支持next()操作的对象。它包含了一组元素,当执行next()操作时,返回其中一个元素。

    当所有元素都被返回后,再执行next()报异常—StopIteration

    生成器一定是可迭代的,也一定是迭代器对象

    (3)区别:

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

    ②迭代输出生成器的内容

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

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

    2023-10-24 02:32:51
最新问题 全部问题