为什么生成器在循环后产生值

Ice*_*ube 1 python generator

我一直在学习发送方法和产量分配如何在生成器中工作并遇到一个问题:

def gen():
    for i in range(5):
        x = yield i
        print(x)
s = gen()
print(next(s))
print(s.send(15))
Run Code Online (Sandbox Code Playgroud)

输出:

0 #after print(next(s))
15
1
Run Code Online (Sandbox Code Playgroud)

所以它会在 后打印 15 和 1 print(s.send(15))。它打破了我对yield的理解,因为我不明白为什么它在打印x后会产生1。我想知道是否有人知道答案。

Bar*_*mar 7

当您呼叫时,s.send(15)发电机恢复运行。的值yield是 的参数s.send(),因此它确实如此,x = 15并且生成器会打印它。然后for循环重复i = 1, 并且确实如此yield i

的值s.send()是生成的下一个值,因此print(s.send(15))打印该值1