0

如果我执行,

a = iter([1,2,3])                                                      
for x in a: 
    print(x) 
    if x==1: 
        z=next(a)

我明白了

1
3

我期望,因为调用next推进迭代器并跳过2.

但是在交互模式(命令行)中,如果我删除z=分配,并且只调用next,它的行为会非常不同。

>>> a = iter([1,2,3])                                                      
>>> for x in a: 
...    print(x) 
...    if x==1: 
...        next(a)

给我

1
2
3

我在 Windows 64 位中使用 Python 3.8.8。这是预期的吗?它只发生在交互模式下。

4

1 回答 1

1

next()除了在x每次迭代中打印之外,解释器还回显返回值。

>>> a = iter([1,2,3])                                                      
>>> for x in a: 
...    print(x) 
...    if x==1: 
...        next(a)

所以 1 和 3 是 的输出print(x),2 是 的返回值next()。如果您分配z=next()事物的输出按预期工作,1,3因为您的 z 没有返回或打印。将“next(a)”的结果分配给变量会禁止打印其结果,以便仅打印“x”循环变量的替代值

于 2021-03-02T06:21:08.683 回答