有没有办法在未产生该值时更新生成器循环条件?
Is there a way to update a generator loop condition when that value isn't yielded?
我正在尝试使用生成器创建计数器,但是,我还希望能够发送 () 并更新生成器输入(虽然不一定会产生此输入)。
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。我将如何处理这个问题,同时仍然保持计数器 'number'?
当我输入 g.send(10) 时我也很困惑,因为它输出 2。据我了解,我认为发送值被发送到产量数字行,然后是代码下面执行。根据上面的代码,它不应该 return 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
我正在尝试使用生成器创建计数器,但是,我还希望能够发送 () 并更新生成器输入(虽然不一定会产生此输入)。
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。我将如何处理这个问题,同时仍然保持计数器 'number'?
当我输入 g.send(10) 时我也很困惑,因为它输出 2。据我了解,我认为发送值被发送到产量数字行,然后是代码下面执行。根据上面的代码,它不应该 return 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