程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python中的yield关键字——生成器函数的用法

hfteth 2024-12-26 13:45:23 技术文章 21 ℃

yield 关键字是 Python 中一个特殊关键字,用于生成器函数(generator function)中。生成器函数与普通函数的区别在于,生成器函数在遇到 yield 关键字时会暂停执行,并返回一个值。然后,当再次调用生成器函数时,会从 yield 关键字所在的位置继续执行。

生成器函数的用法

生成器函数的定义与普通函数类似,只是需要使用 yield 关键字来生成值。例如,以下代码定义了一个生成器函数,用于生成斐波那契数列:

Bash
def fib(n):
  a, b = 0, 1
  while n > 0:
    yield a
    a, b = b, a + b
    n -= 1

调用生成器函数会返回一个生成器对象。生成器对象可以迭代,每次调用 next() 方法都会返回生成器函数生成的下一个值。例如:

Bash
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 关键字可以用于各种需要生成数据的场景,例如:

  • 生成斐波那契数列、杨辉三角等数学序列。
  • 生成无限序列,例如素数序列、二进制小数序列等。
  • 生成文件内容,例如逐行读取文件内容。
  • 实现协程,例如异步编程。

最近发表
标签列表