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”循环变量的备用值
如果我执行,
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”循环变量的备用值