【Python】Python 中 yield 的作用是什么?

在 Python 中,yield 是一个生成器函数,它的作用有:

  1. 惰性求值
    使用 yield 可以实现惰性求值,即在需要时才计算下一个值。
## python www.itzhimei.com 代码
def squares(n):
    for i in range(n):
        yield i**2

for x in squares(5):
    print(x)

# 输出
0
1
4
9
16

只有在循环中用到 x 时,才计算下一个平方数。

  1. 迭代器
    包含 yield 的函数称为生成器,它返回一个可迭代的生成器对象。
## python www.itzhimei.com 代码
gen = squares(5)
print(next(gen)) # 0

可以迭代获取生成器中的下一个值。

  1. 流控制
    yield 可以像 return 一样,返回一个值并暂停函数执行。后面再次调用时从暂停处继续。
## python www.itzhimei.com 代码
def print_name():
    name = "Bob"
    yield name
    name = "Alice"
    yield name

printer = print_name()
print(next(printer)) # Bob
print(next(printer)) # Alice

通过 yield 实现了一个打印姓名的流程控制。

总之,yield实现了惰性求值提高效率,可以获取生成器中的下一个值,还可以控制函数执行流程。