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'
posted @ 2025-07-21 11:53  Nolca  阅读(13)  评论(0)    收藏  举报