gpt4 book ai didi

python - 有没有办法在未产生该值时更新生成器循环条件?

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

我正在尝试使用生成器创建一个计数器,但是,我还希望能够 send() 并更新生成器输入(尽管不一定产生此输入)。

def numberGenerator(n):
number = 0
while number < n:
yield number
number += 1

我希望能够执行 g=numberGenerator(5) -> next(g), 0 -> next(g), 1 -> g.send(10) 来更新值 n,以便生成器当它输出 4 时不会停止,但会继续输出直到 9。我将如何解决这个问题,同时仍然保持“数字”上的计数器?

当我输入 g.send(10) 时我也很困惑,因为它输出 2。据我了解,我认为发送值被发送到产量数字行,然后执行下面的代码。根据上面的代码,它不应该返回 11 吗?

我考虑过尝试另一种 yield,这样我们就可以实际向 n 发送一个值,但我不太确定这将如何与 next() 交互,而且我不一定要保留值 n。

最佳答案

生成器始终运行到下一个yield(或直到结束)——无论是由send 还是next 启动。

请看下面修改后的代码。 newn 是您发送给生成器的值。如果不指定,则为 None。因此,您可以区分设置值和获取值。

def numberGenerator(n):
number = 0
while number < n:
newn = yield number
if newn is None:
number += 1
else:
n = newn

关于python - 有没有办法在未产生该值时更新生成器循环条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58582644/

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