Python yield 使用浅析
yield
是 Python 中一个特殊的关键字,表示生成器的返回值,使用它可以让一个普通函数变成一个生成器函数,即每次遇到 yield
语句时候,函数会将结果返回,并在此处暂停执行,直到被唤醒后再恢复执行。
使用场景
- 实现迭代器
- 逐步批量处理大量数据
- 内存使用控制
- 代码整洁度
使用方法
简单的例子
def simple_generator():
yield 1
yield 2
yield 3
gen = simple_generator()
print(next(gen)) # 输出:1
print(next(gen)) # 输出:2
print(next(gen)) # 输出:3
print(next(gen)) # 抛出 StopIteration 异常
- 定义生成器函数
simple_generator()
- 通过
yield
关键字来输出结果 - 每次调用
next()
函数就会执行一个yield
语句 - 当 Python 解释器执行到函数中没有
yield
的代码行时,会抛出StopIteration
异常表示生成器已经迭代完毕
带参数的例子
def sum_evens(maximum):
sum_ = 0
for i in range(maximum):
if i % 2 == 0:
sum_ += i
yield sum_
gen = sum_evens(10)
print(next(gen)) # 输出:0
print(next(gen)) # 输出:2
print(next(gen)) # 输出:6
print(next(gen)) # 输出:12
- 定义
sum_evens()
生成器函数,传入一个参数 - 使用
for
循环计算每个偶数的和并保存到sum_
变量中 - 通过
yield
关键字输出结果 - 每次调用
next()
函数就会执行一个yield
语句,并返回一个值,同时将函数的运行状态保存下来,以便下次继续运行
注意事项
- 生成器对象必须通过函数调用生成,并且每次每个生成器对象只能使用一次,否则会抛出 StopIteration 异常。
- 不能同时使用
return
和yield
关键字,因为return
会强制中断函数,而yield
只是暂时中断函数。 - 生成器函数不会立即执行,只有在调用
next()
函数时才会执行到yield
语句,并返回结果。
总结
Python 中的 yield
是一个很有用的特殊关键字,可以将普通函数变成生成器函数,让我们能够更好地控制程序的流程并节约内存。其中,可以利用带参数的生成器函数,让我们更好地控制生成器对象的输出结果。在使用 yield
时,还需要注意一些细节问题,例如不能统一返回值、不能同时使用 yield
和 return
等。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python yield 使用浅析 - Python技术站