【发布时间】:2021-04-25 01:30:46
【问题描述】:
我希望能够做这样的事情:
while next(gen):
print(value_from_gen)
我从这个列表开始
x=[1,2,3,4,5]
然后我创建一个生成器来返回值g = ({i:i*2} for i in x)
当我尝试时:
while val = next(g):
print(val)
我明白了:
File "main.py", line 6
while val = next(g):
^
SyntaxError: invalid syntax
当我尝试时:
while next(g):
print(next())
它跳过了一些值,我得到了错误:
{2: 4}
{4: 8}
Traceback (most recent call last):
File "main.py", line 7, in <module>
print(next(g))
StopIteration
当我尝试时:
v= -1
while v is not None:
v=next(g)
print(v)
我得到了所有的值,但仍然得到错误:
{1: 2}
{2: 4}
{3: 6}
{4: 8}
{5: 10}
Traceback (most recent call last):
File "main.py", line 8, in <module>
v=next(g)
StopIteration
当我尝试时:
for v in g:
print(v)
我得到了正确的结果:
{1: 2}
{2: 4}
{3: 6}
{4: 8}
{5: 10}
但是,我想知道这是否等同于调用next(g) 并且它是否保留了生成器的懒惰优势?
另外我想知道是否不可能使用实际的 while 循环来做到这一点?
【问题讨论】:
-
while val = next(g):必须是while val == next(g): -
不清楚您要做什么。为什么
for v in g: print(v)不起作用? -
@BuddyBobIII 不,OP 正在尝试将
next(g)的输出分配给val,而不是比较它们 -
好的,这就是错误的来源。如果 OP 知道这是错误,为什么要发布它?