gpt4 book ai didi

python - 以递归方式使用 Yield

转载 作者:行者123 更新时间:2023-12-01 01:53:47 24 4
gpt4 key购买 nike

我正在研究yield,我编写了一个函数,它接受 3 个数字和一个限制,并以特定方式计算它们(计算并不重要,但可以在代码如下)。

values = []

def compute(limit, a, b, c):
if a <= limit:
print("Got {}, {}, {}".format(a, b, c))
values.append([a, b, c])
compute(limit, b*c, a*c, a*b)
else:
print("Process ended")


compute(9999, 2, 3, 4)
print(values)

这有效,并产生输出:

Got 2, 3, 4
Got 12, 8, 6
Got 48, 72, 96
Got 6912, 4608, 3456
Process ended
[[2, 3, 4], [12, 8, 6], [48, 72, 96], [6912, 4608, 3456]]

但是,我确信这可以通过使用 yield 来完成 - 主要是 values 列表创建部分,如您所见,它是通过以下方式手动填充的我在函数中。

我之所以烦恼的原因就是为什么首先使用 yield - 这里并不重要,但是如果我的任务需要此列表中的第 100000 个值怎么办 - 构造考虑到我不想要之前的 99999 值,它作为一个整体不是必需的,甚至是愚蠢的......

我尝试使用类似的东西:

def compute_y(a, b, c):
while True:
yield b*c, a*c, b*a

for a, b, c in compute_y(2, 3, 4):
if a > 9999:
break

问题在于 for 中的数字始终相同(2、3 和 4),因此它永远不会达到其他值,因此它是一个无限循环.

tl;dr - 我可以在这里使用yield 来使算法对于更大的列表更有效吗?

最佳答案

是的,您需要为下一次循环迭代分配新值:

def compute_y(a, b, c):
while True:
yield a, b, c
a, b, c = b*c, a*c, b*a

关于python - 以递归方式使用 Yield,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50449890/

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