Python中的yield关键字——生成器函数的用法
yield 关键字是 Python 中一个特殊关键字,用于生成器函数(generator function)中。生成器函数与普通函数的区别在于,生成器函数在遇到 yield 关键字时会暂停执行,并返回一个值。然后,当再次调用生成器函数时,会从 yield 关键字所在的位置继续执行。
生成器函数的用法
生成器函数的定义与普通函数类似,只是需要使用 yield 关键字来生成值。例如,以下代码定义了一个生成器函数,用于生成斐波那契数列:
def fib(n):
a, b = 0, 1
while n > 0:
yield a
a, b = b, a + b
n -= 1
调用生成器函数会返回一个生成器对象。生成器对象可以迭代,每次调用 next() 方法都会返回生成器函数生成的下一个值。例如:
generator = fib(5)
print(next(generator)) # 输出 0
print(next(generator)) # 输出 1
print(next(generator)) # 输出 1
print(next(generator)) # 输出 2
print(next(generator)) # 输出 3
yield 的用法
yield 关键字可以用于生成器函数中返回多个值。例如,以下代码定义了一个生成器函数,用于生成 1 到 10 的平方数:
Python
def squares(n):
for i in range(1, n + 1):
yield i * i
调用生成器函数会返回一个生成器对象。生成器对象可以迭代,每次调用 next() 方法都会返回生成器函数生成的下一个平方数。例如:
Python
generator = squares(10)
print(next(generator)) # 输出 1
print(next(generator)) # 输出 4
print(next(generator)) # 输出 9
print(next(generator)) # 输出 16
print(next(generator)) # 输出 25
print(next(generator)) # 输出 36
print(next(generator)) # 输出 49
print(next(generator)) # 输出 64
print(next(generator)) # 输出 81
print(next(generator)) # 输出 100
yield 的注意事项
- yield 关键字只能用于生成器函数中。
- 遇到 yield 关键字时,生成器函数会暂停执行,并返回一个值。
- 再次调用生成器函数时,会从 yield 关键字所在的位置继续执行。
- 生成器函数可以生成多个值。
- 生成器函数在生成完所有值后会抛出 StopIteration 异常。
yield 的应用场景
yield 关键字可以用于各种需要生成数据的场景,例如:
- 生成斐波那契数列、杨辉三角等数学序列。
- 生成无限序列,例如素数序列、二进制小数序列等。
- 生成文件内容,例如逐行读取文件内容。
- 实现协程,例如异步编程。