gpt4 book ai didi

python - 如何从无限生成器中干净地捕获?

转载 作者:太空宇宙 更新时间:2023-11-03 11:45:29 24 4
gpt4 key购买 nike

我觉得应该有一种可爱的方法来使以下(非工作)代码工作:

a, b, c, d = generator()

生成器是无限的,生成的对象在某种程度上很有趣。这只是一种很好的说法,让所有这些变量与这个生成的模式截然不同(也许)。不幸的是这是一个语法错误。我们可以这样做:

a, b, c, d, *_ = generator()

但不幸的是,这试图将 _ 变成一个无限列表,这不是我想要的。我希望它能捕获生成器的残余部分(以供将来引用或忽略)。

我也可以这样做:

gen = generator()
a, b, c, d = (gen.__next__() for _ in range(0, 4))

但这需要我指定 4,我不想这样做。 itertools islice 符号看起来更好:

a, b, c, d = itertools.islice(generator(), 4)

但还是有同样的问题需要计数。我知道这不是世界末日,但感觉这应该是一个可以解决的问题!

最佳答案

基于将无限生成器视为可以根据需要填充池的流的详细方法,可以从中获取项目。当分配试图占用太多时,错误处理可能会填满池。

import itertools

poolSize = 1000

#example stream:
def generator():
i = 1
while True:
yield i**2
i+=1

def fill(pool,gen):
pool += itertools.islice(gen, poolSize - len(pool))

gen = generator()

pool = []
fill(pool,gen)

try:
a,b,c,d,*pool = pool
except ValueError:
fill(pool,gen)
a,b,c,d,*pool = pool

完成此操作后,我认为不值得麻烦。计算 islice 左侧的变量数有多难?

关于python - 如何从无限生成器中干净地捕获?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40635493/

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