使用带有生成器的while循环海象操作符



我想在while循环中使用一个带有简单生成器的海象操作符

def gen():
for i in range(5):
yield i
yield 10

g = gen()
while i := next(g):
print(i)

我期望输出是:

0
1
2
3
4
10

但是它没有打印任何东西。我知道我可以在for循环中做到这一点:

for i in gen():
print(i)

我对输出是否精确不感兴趣。我想要一个使用生成器和海象操作符的简单示例。

这个循环:

while i := next(g):
print(i)

将遍历生成器的每个元素并输出它,直到其中一个为false。由于生成器的第一个元素是0,因此while条件立即为false,循环结束时不打印。

但是,例如,如果你的迭代器是:

g = iter([2,1,0,2,5])

则循环将输出2和1,并在接收到值0时停止。


如果你想遍历所有元素,直到元素耗尽,只需使用:

for i in g:
print(i)

gen()第一次迭代时返回0。Range(1,5)设置范围从1到5。我还将10更新为None,否则生成器将耗尽并抛出Ex

def gen():
for i in range(1, 5):
yield i
yield None

g = gen()
while i := next(g):
print(i)

输出:

1
2
3
4
Process finished with exit code 0

因为使用的是while循环,所以需要条件为True。返回的第一个元素是0。解析为False

如果需要:=操作符,使用:

try:
while (i := next(g)) or i == 0:
print(i)
except StopIteration:
# This executes when the generator is exhausted
pass

或者使用range(1, 10),因此0永远不会返回


如果您愿意更改,请使用:

for i in g:
print(i)

或者您避免删除g的赋值,并执行:

for i in gen():
print(i)

相关内容

  • 没有找到相关文章

最新更新