Python中如何详细理解和使用生成器?

2026-06-11 03:210阅读0评论SEO基础
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1315个文字,预计阅读时间需要6分钟。

Python中如何详细理解和使用生成器?

在《前言》章节中,已详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它具有一些独特之处。以list容器为例,在使用该容器迭代一组数据时,必须先将所有数据存储到容器中,才能开始迭代。

前面章节中,已经详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它比较特殊。

以 list 容器为例,在使用该容器迭代一组数据时,必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。

也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。

不仅如此,生成器的创建方式也比迭代器简单很多,大体分为以下 2 步:
  1. 定义一个以 yield 关键字标识返回值的函数;
  2. 调用刚刚创建的函数,即可创建一个生成器。

举个例子:

def intNum(): print("开始执行") for i in range(5): yield i print("继续执行") num = intNum() 由此,我们就成功创建了一个 num 生成器对象。显然,和普通函数不同,intNum() 函数的返回值用的是 yield 关键字,而不是 return 关键字,此类函数又成为生成器函数。

和 return 相比,yield 除了可以返回相应的值,还有一个更重要的功能,即每当程序执行完该语句时,程序就会暂停执行。不仅如此,即便调用生成器函数,Python 解释器也不会执行函数中的代码,它只会返回一个生成器(对象)。

阅读全文

本文共计1315个文字,预计阅读时间需要6分钟。

Python中如何详细理解和使用生成器?

在《前言》章节中,已详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它具有一些独特之处。以list容器为例,在使用该容器迭代一组数据时,必须先将所有数据存储到容器中,才能开始迭代。

前面章节中,已经详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它比较特殊。

以 list 容器为例,在使用该容器迭代一组数据时,必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。

也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。

不仅如此,生成器的创建方式也比迭代器简单很多,大体分为以下 2 步:
  1. 定义一个以 yield 关键字标识返回值的函数;
  2. 调用刚刚创建的函数,即可创建一个生成器。

举个例子:

def intNum(): print("开始执行") for i in range(5): yield i print("继续执行") num = intNum() 由此,我们就成功创建了一个 num 生成器对象。显然,和普通函数不同,intNum() 函数的返回值用的是 yield 关键字,而不是 return 关键字,此类函数又成为生成器函数。

和 return 相比,yield 除了可以返回相应的值,还有一个更重要的功能,即每当程序执行完该语句时,程序就会暂停执行。不仅如此,即便调用生成器函数,Python 解释器也不会执行函数中的代码,它只会返回一个生成器(对象)。

阅读全文