在 Python 中,yield 是一个重要的关键字,它与生成器(Generator)和懒惰计算(Lazy Evaluation)密切相关。理解 yield 对于编写高效、内存友好的 Python 代码至关重要。
yield 允许函数在迭代过程中产生值,而不必一次性将所有值计算出来。这种特性在处理大数据集、无限序列或需要流式处理数据时尤其有用。
一、yield 关键字基础
1.1 yield 的基本概念
yield 用于定义生成器函数。与普通函数不同,生成器函数在被调用时不会立即执行函数体,而是返回一个生成器对象。当对生成器对象进行迭代(如调用 next() 或在 for 循环中)时,函数体才会开始执行。
当生成器函数执行到 yield 语句时,它会暂停函数的执行,将 yield 后面的表达式结果作为返回值,并保存当前的局部变量和执行状态。当下一次请求值时,函数会从上次暂停的地方继续执行,直到遇到下一个 yield 或函数结束。
1.2 生成器的工作原理
生成器是一种特殊类型的迭代器,由生成器函数创建。生成器函数包含至少一个 yield 语句。这允许生成器函数的状态保持不变,而值可以逐个生成。
以下是一个简单的生成器函数示例:
def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
print(next(gen)) # 输出:1
print(next(gen)) # 输出:2
print(next(gen)) # 输出:3
示例中,simple_generator 是一个生成器函数。当我们创建生成器对象 gen 并调用 next() 函数时,生成器函数在每次调用后从 yield 语句处继续执行,并生成相应的值。如果再次调用 next() 且没有更多 yield,则会抛出 StopIteration 异常。
二、创建生成器
2.1 生成器函数
生成器函数是一种包含 yield 语句的函数,用于生成值。生成器函数的执行可以被多次暂停和继续,每次暂停都会生成一个值。
以下是一个生成器函数的示例,用于生成斐波那契数列:
def fibonacci_generator():
a, b = 0, 1
while :
a
a, b = b, a + b
gen = fibonacci_generator()
_ ():
((gen))


