【问题标题】:A value is missing in my iterator and I don't know why我的迭代器中缺少一个值,我不知道为什么
【发布时间】:2018-10-24 14:37:24
【问题描述】:

我有一个非常基本的生成器,您可以在循环期间通过 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”值怎么不见了?

感谢您的帮助。

【问题讨论】:

  • 当你在 15 中推进迭代器时,但在下一次迭代中它再次推进,这就是你错过它的原因
  • myGen.send(20) 将产生 20,您可以忽略它。下一次循环时,你会得到21

标签: python loops iterator generator yield


【解决方案1】:

问题是send 调用实际上运行了一个迭代并返回一个值,而您没有对它做任何事情。

试试这个:

print(myGen.send(20))

https://repl.it/repls/RuddyConcretePrinters

【讨论】:

  • 请注意,这将打印20 之前 15
  • 我不知道迭代和结果是由发送本身返回的。谢谢你们!
【解决方案2】:

正如@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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-07
    • 2021-12-02
    • 1970-01-01
    • 2023-01-18
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多