循环通过返回多个值的生成器

时间:2017-06-14 20:12:52

标签: python python-3.x

我的生成器(batch_generator)返回5个值,但我似乎无法弄清楚如何遍历这些值。

我尝试的事情:

1)直接在for循环定义(ValueError: too many values to unpack (expected 5)

中解包
for a, b, c, d, e in next(batch_generator):
    # do something with a-e

2)在for循环中解压缩(ValueError: too many values to unpack (expected 5)在我解包的行item

for item in next(batch_generator):
    a, b, c, d, e = item
    # do stuff

3)压缩它并在for循环定义(ValueError: not enough values to unpack (expected 5, got 1)

中解压缩
for a, b, c, d, e in zip(next(batch_generator)):
    # do stuff

4)压缩它并在for循环中解压缩(ValueError: not enough values to unpack (expected 5, got 1)在我解压缩item的行上,我认为它现在只包含在另一个元组中了)

for item in zip(next(batch_generator)):
     a, b, c, d, e = item

对元组/生成器真正发生的事情的任何解释都将不胜感激!

1 个答案:

答案 0 :(得分:5)

  

我的yield语句看起来像public void resize(int width, int height) { camera.viewportWidth = width; camera.viewportHeight = height; camera.update(); }

根据该评论,生成器似乎发出一系列5元组。

然后您可以使用:

yield a, b, c, d, e

所以你应该不要使用for a, b, c, d, e in batch_generator: # ^ no next(..) pass 。接下来只需返回下一个next(..) 。既然这是一个元组,yield循环将迭代元组,而不是生成器。

for循环将遍历生成器for发出的元组,直到生成器耗尽(或batch_generator / break语句中return / for语句1}}被激活的循环。

请注意for循环的作用如下:

for <pattern> in <expression>:
    # ...

<expression>应该是可迭代的(生成器,元组,列表,...),<pattern>用于分配。如果迭代元组,则迭代该元组的元素,而不是完整的元组。