Python的yield from关键字

yield from + 生成器

在 Python 中,如果想在一个生成器中把另一个生成器的值传递出去,一种方法是用 for 循环逐个消费生成器的值并 yield

1
2
3
4
5
6
7
8
9
10
11
def child():
yield 1
yield 2

def parent():
yield 0
for value in child():
yield value
yield 3

print(list(parent())) # [0, 1, 2, 3]

如果不想这么写,还有一种更简单、优雅的写法,即利用 yield from

1
2
3
4
5
6
7
8
9
10
def child():
yield 1
yield 2

def parent():
yield 0
yield from child()
yield 3

print(list(parent())) # [0, 1, 2, 3]

yield from + 可迭代对象

yield from 不仅可以用在生成器上,也可以用在普通的可迭代对象上:

1
2
3
4
5
6
7
8
9
def child():
return [1, 2]

def parent():
yield 0
yield from child()
yield 3

print(list(parent())) # [0, 1, 2, 3]

yield from 的返回值

yield from 和生成器一起使用时,yield from 的返回值就是生成器的返回值:

1
2
3
4
5
6
7
8
9
10
11
12
def child():
yield 1
yield 2
return "done"

def parent():
yield 0
result = yield from child()
yield 3
yield result

print(list(parent())) # [0, 1, 2, 3, 'done']

上面两段代码中,只有含有 yield 的函数才是生成器。普通函数的返回值会被 yield from 直接消费;只有生成器的返回值,才会变成 yield from 的返回值。


Python的yield from关键字
https://tomzhu.site/2026/07/12/Python的yield-from关键字/
作者
Tom Zhu
发布于
2026年7月12日
许可协议