我想在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)