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

liftword4个月前 (01-16)技术文章41

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

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

相关文章

六十六、Leetcode数组系列(中篇)

@Author:Runsen @Date:2020/6/8人生最重要的不是所站的位置,而是内心所朝的方向。只要我在每篇博文中写得自己体会,修炼身心;在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰难...

Python地铁学习计划——迭代器和生成器

地铁上不要再看“钢鞭的故事”了,关注我一起学习!前言这篇内容挺多的,而且比内容不好理解。或许新手看完后,还会一脸懵逼,不过这是正常的,如果你看完后,是迷糊的,那么建议你继续学习后面的内容,等学完,再回...