Python交互模式:不使用返回值调用next不推进迭代器

问题描述

如果我执行,

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,3])                                                      
>>> for x in a: 
...    print(x) 
...    if x==1: 
...        next(a)

给我

1
2
3

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

解决方法

解释器回显 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”循环变量的替代值