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

Python interactive mode: calling next without using return value does not advance iterator

如果我执行,

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。这是预期的吗?它只发生在交互模式下。

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

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

所以 1 和 3 是 print(x) 的输出,2 是 next() 的 return 值。如果您分配 z=next() 的输出,事情会按预期工作 1,3 因为您的 z 没有 returning 或打印。将“next(a)”的结果分配给变量会禁止打印其结果,因此只会打印“x”循环变量的备用值