yield
这个关键字在 Python 中是个神奇的存在。如果你刚刚踏入 Python 的世界,可能会对它感到一点点困惑。
yield 的本质
首先,得知道 yield
是啥。简单来说,yield
是 Python 中的一个关键字,它的作用有点像 return
,但也有本质的不同。使用 yield
的函数被称为生成器(generator)。
def simple_generator():
yield 1
yield 2
yield 3
当你调用这个函数时,它其实并不立即执行,而是返回一个生成器对象。你可以通过遍历这个对象,或者使用 next()
函数来逐个获取值。
为什么要用yield?
你可能会问,为啥要用这个麻烦的东西,直接返回列表不好吗?这就是 yield
神奇的地方了。
- 节省内存:假设你要处理的数据量巨大,直接返回一个包含所有数据的列表可能会消耗掉大量内存。而
yield
每次只产生一个数据项,不需要一次性把所有数据加载到内存中。 - 提高性能:你可以在需要数据的时候才生成它,而不是一开始就计算好所有的数据。
yield 的使用案例
想象一下,你要写个函数,生成斐波那契数列的前 N 项。
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
使用 yield
,你可以这样获取斐波那契数列:
for num in fibonacci(10):
print(num)
yield 和 return 的区别
return
在函数中返回一个值,之后函数会结束。yield
返回一个值给调用者,并暂停执行,保持函数的状态,从而允许后续从它停止的地方继续执行。
yield from
进阶一点,yield from
用于在一个生成器中调用另一个生成器,这样可以更方便地编写嵌套的生成器。
def generator1():
yield from range(3)
yield from range(4)
list(generator1()) # [0, 1, 2, 0, 1, 2, 3]
看到这里,你是不是感觉 yield
已经没那么复杂了?实际上,开始用的时候可能会有些手忙脚乱,但一旦你掌握了它,就会发现它真的超级好用。希望这篇文章能帮你理解 yield
,快去用起来吧!