我的生成器(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
对元组/生成器真正发生的事情的任何解释都将不胜感激!
答案 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>
用于分配。如果迭代元组,则迭代该元组的元素,而不是完整的元组。