为什么使用共享生成器的“yield from”看似等效的代码会导致 StopIteration?

Haw*_*wii 9 python generator

我试图理解关键字的行为yield from,但发现它很难解释......

这是设置:

案例 1 - 如果我运行这个代码片段,也不会有例外。

gen = (x for x in range(10))

def func():
    yield from gen

F21 = func()
F22 = func()
next(F21)
next(F22)
Run Code Online (Sandbox Code Playgroud)

案例 2 - 这次我没有引入变量F21和,而是遇到了异常。F22StopIteration

gen = (x for x in range(10))

def func():
    yield from gen

next(func())
next(func())
Run Code Online (Sandbox Code Playgroud)

两种情况为何有差异?