python yield 实现可暂停/中断/继续的任务抽象
起因
想到用yield可以保留函数内临时变量,配合next()可以实现可暂停/继续的任务功能:
最小示例
def inner():
for frame in range(3):
yield f'{frame=}'
return 'inner'
def outer():
ret = yield from inner()
yield ret
return 'outer'
gen = outer()
running = True
while running:
try:
print(f'{next(gen)=}')
except StopIteration as e:
running = False
print(f'{e.value=}')
期望输出:
next(gen)='frame=0'
next(gen)='frame=1'
next(gen)='frame=2'
next(gen)='inner'
e.value='outer'

浙公网安备 33010602011771号