gpt4 book ai didi

python - 如何在 Python 中使用捆绑/打包生成器?

转载 作者:太空宇宙 更新时间:2023-11-03 19:31:38 25 4
gpt4 key购买 nike

为了分摊函数调用开销,我更改了生成器,以便它生成一个包含几个值的固定长度列表,而不是一次生成一个值。生成器按照最初的样子,从包含多个 pickle 对象的文件中 unpickle 一个对象,并生成它。然后,这些内容在消耗生成器的 for 循环内进行处理。事实证明,这种方法比将对象处理代码放在手动展开的循环中(一次解封文件中的多个连续项目)要慢得多。我正在尝试妥协。我修改过的生成器一次生成一个固定长度的腌制对象列表。我正在寻找一种 Pythonic 方式来在消费者端解压未腌制的对象包。

有没有办法在没有额外嵌套循环的情况下解构这些数据包?我错误地认为 * 运算符会这样做:

for x in *packetizing_generator(): f(x)

嵌套循环当然可以,但我想知道是否有更短、更优雅的方法。

最佳答案

我认为这就是您所说的,如果我的方向不对,请告诉我。

for a, b, c in your_generator:
# do stuff

假设 your_generator 产生的结果恰好是 3 个项目的序列。

您可以使用以下方法构造一个生成器,一次恰好生成 n 个项目,以便在 for 循环中使用:

itertools.izip_longest(*[your_generator]*n)

如果您的生成器一次不能生成一个项目,并且您想更改它生成的项目数量,请使用以下命令:

itertools.izip_longest(*[itertools.chain(*your_generator)]*n)

这是一个例子:

>>> from itertools import izip_longest, chain, combinations
>>> for a, b, c, d in izip_longest(*[chain(*combinations(range(4), 2))]*4):
... print a, b, c, d
...
0 1 0 2
0 3 1 2
1 3 2 3

这需要一个最初一次生成两个元素的生成器,现在一次生成四个元素。

关于python - 如何在 Python 中使用捆绑/打包生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5518564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com