Python中如何详细理解和使用生成器?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1315个文字,预计阅读时间需要6分钟。
在《前言》章节中,已详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它具有一些独特之处。以list容器为例,在使用该容器迭代一组数据时,必须先将所有数据存储到容器中,才能开始迭代。
前面章节中,已经详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它比较特殊。以 list 容器为例,在使用该容器迭代一组数据时,必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。
不仅如此,生成器的创建方式也比迭代器简单很多,大体分为以下 2 步:也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。
- 定义一个以 yield 关键字标识返回值的函数;
- 调用刚刚创建的函数,即可创建一个生成器。
举个例子:
def intNum():
print("开始执行")
for i in range(5):
yield i
print("继续执行")
num = intNum()
由此,我们就成功创建了一个 num 生成器对象。显然,和普通函数不同,intNum() 函数的返回值用的是 yield 关键字,而不是 return 关键字,此类函数又成为生成器函数。
和 return 相比,yield 除了可以返回相应的值,还有一个更重要的功能,即每当程序执行完该语句时,程序就会暂停执行。不仅如此,即便调用生成器函数,Python 解释器也不会执行函数中的代码,它只会返回一个生成器(对象)。
本文共计1315个文字,预计阅读时间需要6分钟。
在《前言》章节中,已详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它具有一些独特之处。以list容器为例,在使用该容器迭代一组数据时,必须先将所有数据存储到容器中,才能开始迭代。
前面章节中,已经详细介绍了什么是迭代器。生成器本质上也是迭代器,不过它比较特殊。以 list 容器为例,在使用该容器迭代一组数据时,必须事先将所有数据存储到容器中,才能开始迭代;而生成器却不同,它可以实现在迭代的同时生成元素。
不仅如此,生成器的创建方式也比迭代器简单很多,大体分为以下 2 步:也就是说,对于可以用某种算法推算得到的多个数据,生成器并不会一次性生成它们,而是什么时候需要,才什么时候生成。
- 定义一个以 yield 关键字标识返回值的函数;
- 调用刚刚创建的函数,即可创建一个生成器。
举个例子:
def intNum():
print("开始执行")
for i in range(5):
yield i
print("继续执行")
num = intNum()
由此,我们就成功创建了一个 num 生成器对象。显然,和普通函数不同,intNum() 函数的返回值用的是 yield 关键字,而不是 return 关键字,此类函数又成为生成器函数。
和 return 相比,yield 除了可以返回相应的值,还有一个更重要的功能,即每当程序执行完该语句时,程序就会暂停执行。不仅如此,即便调用生成器函数,Python 解释器也不会执行函数中的代码,它只会返回一个生成器(对象)。

