在 Python 编程中,yield 是一个非常强大但初学者容易困惑的关键字。它用于定义 生成器函数(Generator Function),是实现 迭代器(Iterator) 的一种简洁方式。本教程将从零开始,用通俗易懂的语言带你彻底搞懂 yield 的工作原理和使用场景。
yield 语句的作用类似于 return,但它不会终止函数,而是“暂停”函数的执行,并在下次调用时从中断处继续。包含 yield 的函数被称为 生成器函数,调用它会返回一个 生成器对象(Generator Object),该对象是一个特殊的 迭代器。

先看一个使用 return 的普通函数:
def normal_function(): return [1, 2, 3]result = normal_function()print(result) # 输出: [1, 2, 3]再看一个使用 yield 的生成器函数:
def generator_function(): yield 1 yield 2 yield 3result = generator_function()print(result) # 输出: <generator object generator_function at 0x...>print(list(result)) # 输出: [1, 2, 3]注意:调用生成器函数并不会立即执行函数体,而是返回一个生成器对象。只有在遍历(如用 for 循环或 list())时,函数才会逐次执行到每个 yield 并返回值。
每次遇到 yield,函数会:
yield 后面的值;yield 的下一行继续执行。来看一个带状态的例子:
def count_up_to(max): count = 1 while count <= max: yield count count += 1# 使用生成器for num in count_up_to(5): print(num)# 输出:# 1# 2# 3# 4# 5使用 yield 创建生成器有以下显著优点:
yield 更直观、更 Pythonic。例如,读取大文件时,可以逐行生成内容而不占用大量内存:
def read_large_file(file_path): with open(file_path, 'r') as f: for line in f: yield line.strip()# 使用for line in read_large_file('huge_log.txt'): process(line) # 逐行处理,不加载整个文件到内存除了作为 迭代器,生成器还可用于实现简单的 协程(Coroutine)。通过 generator.send(value),我们可以向生成器传递数据。
def echo(): while True: received = yield print(f"收到: {received}")# 启动生成器g = echo()next(g) # 必须先执行一次 next() 或 send(None) 来启动g.send("Hello") # 输出: 收到: Hellog.send("World") # 输出: 收到: World这种能力使得生成器在异步编程、状态机等场景中非常有用。
yield 是 Python 中实现 生成器函数 的核心关键字。它让函数具备“暂停-恢复”的能力,从而高效地生成一系列值。掌握 yield 不仅能写出更省内存的代码,还能为理解 迭代器、协程 等高级概念打下基础。
记住这四个关键词:Python yield、生成器函数、迭代器、协程。它们是你深入 Python 异步与高效编程的关键。
现在,试着自己写一个生成器吧!比如生成斐波那契数列,或者一个倒计时器。实践是最好的老师!
本文由主机测评网于2025-12-11发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025126363.html