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只返回Nextyield
。既然这是一个元组,那么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>:
# ...