我正在尝试使用生成器创建一个计数器,但是,我也希望能够 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/