yeild与return
在编程的世界里,理解各种概念往往是进步的阶梯。今天,我们来探讨一个在 Python 中相当有趣且强大的关键字:yield
。如果你对它还感到陌生,不妨将 yield
视作 return
的同胞兄弟。是的,它们都承担着在函数中返回某种结果的重要职责。但事实上,yield
和 return
在功能上有着本质的不同。
使用
return
的函数:这类函数在执行到return
语句时,会直接返回所有结果。一旦返回结果,程序便终止运行,并且局部变量被销毁。这种方式简单直接,但在处理大量数据时可能会导致内存问题。搭载
yield
的函数:相较于return
,yield
提供了一种优雅的机制,允许函数返回一个可迭代的生成器(generator)对象。这意味着函数的执行可以在yield
处被暂停,并在需要的时候继续从上次离开的地方执行。你可以通过for
循环或next()
方法遍历这个生成器对象,逐一提取结果,这种方式大大节约了内存使用。
那么,生成器到底是什么呢?简单来说,在 Python 中,任何使用了 yield
的函数 都会被视为一个生成器。这听起来可能有点像是语言的套娃游戏,但这正是其魅力所在。通过调用含有 yield
的函数,你实际上得到的是一个生成器对象。这个对象背后隐藏着强大的潜力,能够以极低的内存消耗处理大量数据。
为什么使用生成器? 使用生成器的一个主要原因是其高效的内存利用特性。想象一下处理一个庞大的数据集合,如果一次性加载进内存,无疑会给系统带来巨大的压力。而生成器则允许我们逐步处理数据,只在需要时才生成下一个元素,这种“按需获取”的策略显著降低了内存的使用。
举例说明
1 | def return_example(): |
输出结果:1
2
3
4
5
6
7
8(d2l) (base) chenyubin@chenyubindeMacBook-Pro d2l % /Users/chenyubin/anaconda3/envs/d2l/bin/python /Users/chenyubin/Desktop/no_emo/gi
thub/d2l/test.py
This is the first line.
Return statement
This is the first line.
Yield statement
This line will be executed after the first yield.
Second yield statement