Python进阶: yield 与 yield from

在Python中,`yield`和`yield from`都是用于生成器的关键字,但它们的用途有所不同。

`yield`用于使函数成为一个生成器。当你在函数中使用`yield`时,函数会变成一个生成器,这意味着你可以在调用这个函数的时候使用`next()`来获取下一个值,而不是一次性返回所有的值。这对于处理大量数据时超级有用,由于你不需要一次性加载所有的数据到内存中。

def generator():
    for i in range(5):
        yield i

for number in generator():
    print(number)
# 1 
# 2
# 3
# 4
# 5

`yield from`是Python 3.3中引入的新语法,用于在生成器中产生另一个生成器的值。这使得生成器可以更容易地被重用和组合。`yield from`后面必须跟iterable对象,它返回所有在该iterable对象中的值。

def generator1():
    for i in range(5):
        yield i

def generator2():
    yield from generator1()

for number in generator2():
    print(number)

# 1 
# 2
# 3
# 4
# 5

但如果 `generator2`中不是 `yield from` 而是`yield`, 最后的打印输出就会是

# <generator object generator1 at 0x10b42edc0>

可以认为`yield from` 提供了一种穿透效果。实际上python3 中的早期的协程`coroutine`也是基于`yield from` 语法。

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
树上有只的头像 - 鹿快
评论 共1条

请登录后发表评论