在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















暂无评论内容