【Python】一直没搞懂生成器是什么。。
生成器
上期我们讲解了迭代器:【Python】一直没搞懂迭代器是什么。。-CSDN博客
这期我们来讲讲它的好兄弟——生成器
生成器 (Generator)?
生成器是一种特殊的 迭代器
(Iterator
)。
迭代器 是你可以逐个访问其元素的对象(比如在 for
循环中使用)。列表、元组、字典、字符串等都是可迭代对象,但它们不是迭代器本身。你可以通过调用 iter()
函数从可迭代对象获取迭代器。迭代器有一个 next() 方法,每次调用它会返回下一个元素,如果没有更多元素了,会引发 StopIteration
异常。
生成器 是一种创建迭代器的简单而强大的方法。它看起来像一个普通的函数,但关键区别在于它使用 yield 关键字来返回值,而不是 return
。
yield
是啥?
yield
是一个 Python 关键字,它有两个主要作用:
- 定义生成器函数: 任何包含
yield
语句的函数都会自动成为一个生成器函数。调用这个函数不会立即执行函数体,而是返回一个生成器对象(也就是一个迭代器)。 - 返回值并暂停: 当生成器函数的执行遇到
yield
语句时:yield
后面的表达式的值会被返回给调用者(即正在迭代该生成器的代码)。- 函数的执行会在此处暂停,并保存当前的所有状态(包括局部变量)。
- 当调用者请求下一个值时,函数会从暂停的地方恢复执行,直到遇到下一个
yield
或函数结束。
- 对比学习:
yield
vsreturn
:
-
return
会彻底终止函数的执行,并返回一个值(或None
)。函数的状态不会被保存。 -
yield
只会暂停函数的执行,并返回一个值。函数的状态会被保存,以便下次可以恢复。一个生成器函数可以有多个yield
语句。
yield
和生成器
,它们俩两个的关系?
- <