迭代器中缺少一个值,我不知道为什么

2024-04-20 10:20:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个非常基本的生成器,您可以在循环期间通过yield回调发送一个新值:

def GenInter(x, y):

    while (x+1 < y):
        callback = (yield x)
        if callback is not None:
            x = callback
        else:
            x += 1

然后,我创建一个生成器:

myGen = GenInter(10,25)

最后,我用for循环解析它。当它是“15”时,我想直接转到“20”。你知道吗

for x in myGen:
    if x == 15:
        myGen.send(20)
    print(x)

结果如下:

10
11
12
13
14
15
21
22
23

为什么缺少“20”值?你知道吗

谢谢你的帮助。你知道吗


Tags: innonesendforifisdefcallback
2条回答

问题是send调用实际上运行一个迭代并返回一个值,而您没有对它做任何操作。你知道吗

试试这个:

print(myGen.send(20))

https://repl.it/repls/RuddyConcretePrinters

正如@Imreal和@Abarnert所指出的,myGen.send(20)产生缺失的20。您可以通过将迭代更改为以下内容来解决问题:

for x in myGen:
    y = x
    if x == 15:
        y = myGen.send(20)
    print(y)

它返回以下输出:

10
11
12
13
14
20
21
22
23

相关问题 更多 >