Python 的 yield 关键字详解
如果你刚学 Python,可能对 yield 这个关键字有点陌生——它看起来像 return,却又和 return 不一样。其实 yield 一点都不难,它的核心作用就一个:帮我们创建'生成器',实现'用的时候再生成数据',既省内存又灵活。不管是处理大文件,还是生成无限序列,yield 都能派上大用场。
要搞懂 yield,先对比我们最熟悉的 return——毕竟它们都是'返回值'的工具,但用法和效果完全不同。
生成器函数 VS 普通函数
- 普通函数(用 return):执行到
return就结束,状态全销毁
def normal_func():
print('执行第 1 步')
return 1
print('执行第 2 步')
# 调用执行
result = normal_func()
print(f'普通函数:{result}')
这段代码运行的结果会是什么呢?
结果如下:
执行第 1 步 普通函数:1
- 生成器函数(用 yield):遇到
yield就暂停,保留状态
只要函数里有 yield,它就不是普通函数了,而是'生成器函数'。调用它不会执行代码,只会得到一个'生成器对象';只有用 next() 或 for 循环迭代时,才会执行代码。
def gen_func():
print("执行第一步")
yield 1 # 暂停执行,返回 1,保留当前状态
print("执行第二步")
yield 2 # 再次暂停,返回 2
print("执行第三步")
yield 3 # 最后一次暂停,返回 3
# 调用生成器函数,不会执行代码,只得到生成器对象
gen = gen_func()
print(, gen)
()
((gen))
()
((gen))
()
((gen))


