我希望从生成器中只需要尽可能多的项目。
在下面的代码中
a, b, c = itertools.count()
我收到此异常:
ValueError: too many values to unpack
我已经看到了几个相关的问题,但是我对生成器的剩余物品的兴趣为零,我只希望收到我要求的数量,而不是提前提供那个数量。
在我看来,Python 确定了您想要的项目数量,但随后继续尝试读取和存储超过该数量的项目(生成ValueError
)。
我怎样才能只生产我需要的数量,而不传递我想要的数量?
更新0
为了帮助理解我认为应该可能的近似行为,这里有一个代码示例:
def unpack_seq(ctx, items, seq):
for name in items:
setattr(ctx, name, seq.next())
import itertools, sys
unpack_seq(sys.modules[__name__], ["a", "b", "c"], itertools.count())
print a, b, c
如果您可以改进此代码,请执行此操作。
Alex Martelli 的回答向我表明字节操作UNPACK_SEQUENCE
是造成限制的原因。我不明白为什么这个操作应该要求生成的序列也必须在长度上完全匹配。
请注意,Python 3 具有不同的解包语法,这可能会使该问题中的技术讨论无效。