Python 在返回多个值的生成器中循环

Python 在返回多个值的生成器中循环,python,python-3.x,Python,Python 3.x,我的生成器(batch\u generator)返回5个值,但我似乎不知道如何循环遍历这些值 我尝试过的事情: 1) 直接在for循环定义中解包(ValueError:要解包的值太多(预期为5个)) 2) 在for循环中解包(value错误:解包项所在行上的值太多(预期为5)) 3) 在for循环定义中将其压缩并解压缩(ValueError:没有足够的值来解压缩(预期为5,得到1)) 4) 压缩它并在for循环中解包(ValueError:解包的值不足(预期为5,得到1)在我解包项的行上,我想它

我的生成器(
batch\u generator
)返回5个值,但我似乎不知道如何循环遍历这些值

我尝试过的事情:

1) 直接在for循环定义中解包(
ValueError:要解包的值太多(预期为5个)

2) 在for循环中解包(
value错误:解包
项所在行上的值太多(预期为5)

3) 在for循环定义中将其压缩并解压缩(
ValueError:没有足够的值来解压缩(预期为5,得到1)

4) 压缩它并在for循环中解包(
ValueError:解包的值不足(预期为5,得到1)
在我解包
项的行上,我想它现在只是包装在另一个元组中)

如果您能解释一下元组/生成器的真实情况,我们将不胜感激

我的收益率声明看起来像
收益率a、b、c、d、e

基于该注释,生成器似乎发出一个5元组序列

然后,您可以简单地使用:

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

for
循环将迭代生成器
batch\u generator
发出的元组,直到生成器耗尽(或者在激活的
for
循环中有
break
/
return
语句)

请注意,for
循环的工作原理如下:

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

应该是一个iterable(生成器、元组、列表等)而
是用来赋值的。如果你迭代元组,你就迭代元组的元素,而不是整个元组。

但是它发出5个项目,它不发出5个元素的元组。你能显示batch generator返回的到底是什么吗?我不确定你的意思是什么——有区别吗?我的产量声明看起来很简单ke
生成a、b、c、d、e
。啊,我忽略了一个多么简单的修复方法——非常感谢您的清晰解释!
for a, b, c, d, e in zip(next(batch_generator)):
    # do stuff
for item in zip(next(batch_generator)):
     a, b, c, d, e = item
for a, b, c, d, e in batch_generator:
    #                ^ no next(..)
    pass
for <pattern> in <expression>:
    # ...