在 Python 中,yield 是一个生成器函数,它的作用有:
- 惰性求值
使用 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 时,才计算下一个平方数。
- 迭代器
包含 yield 的函数称为生成器,它返回一个可迭代的生成器对象。
## python www.itzhimei.com 代码
gen = squares(5)
print(next(gen)) # 0
可以迭代获取生成器中的下一个值。
- 流控制
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实现了惰性求值提高效率,可以获取生成器中的下一个值,还可以控制函数执行流程。