Python 为什么';t海象操作符增加我的索引 来自C++,我期望一个后增量。 但正如@chepner所指出的,指数是提前增加的。 哎呀…

Python 为什么';t海象操作符增加我的索引 来自C++,我期望一个后增量。 但正如@chepner所指出的,指数是提前增加的。 哎呀…,python,Python,它确实增加了索引;但是表达式的值是索引的新值 打印(一倍[(索引:=索引+1)])与 aTuple = (100, 101, 102, 103) for aBool in (False, True): index = -1 if aBool: print (aTuple [(index := index + 1)]) print (aTuple [(index := index + 1)]) print (aTuple [(index

它确实增加了
索引
;但是表达式的值是
索引的新值

打印(一倍[(索引:=索引+1)])

aTuple = (100, 101, 102, 103)

for aBool in (False, True):
    index = -1

    if aBool:
        print (aTuple [(index := index + 1)])
        print (aTuple [(index := index + 1)])

    print (aTuple [(index := index + 1)])
    print (aTuple [index])
    print ()

'''
Expected output:

100
101

100
101
102
102


True output:

100
100

100
101
102
102
'''
因此,在循环结束时,两个
print
函数看到相同的参数

--

作为避免显式索引操作的示例,可以使用具有动态选择的起点的切片:

index = index + 1
print(aTuple[index])

您正在将
for
循环的
开始处的
索引重置为-1。它确实成功地增加了第一次打印的次数(100次打印,而不是103次,如果没有打印的话-很明显,打印语句是用
索引==0
,而不是
索引==-1
,这可能是因为第一次打印语句中的赋值运算符),但是下次您会重置它。所以,一次递增是100,再次递增是101,以此类推


删除该赋值,并将其保留在for循环之外,当索引爬升到3以上时,您将得到您期望的
索引器。

对不起,我添加了额外的赋值,我已将其编辑掉,但问题似乎仍然存在。因此,如果它赋值index=index+1,如果aBool是假的,为什么它会打印100次呢?因为打印这些的是最后两行。第一个值递增
索引
,然后使用新值0。第二个值再次使用当前值0。当
aBool
为真时也会发生同样的情况,只是重复的是2的索引。我明白了,你是对的!Python中通常有比遍历序列的显式索引操作更高级别的抽象。为什么您希望有这样的输出
100 101
102 102
不一致。@chepner澄清了我的错误,谢谢。请注意,如果是增量后,在任何一种情况下,您对
print
的第一次调用都将使用
aTuple[-1]
,即103。是的,调试时间有点长,需要喝咖啡
aTuple = (100, 101, 102, 103)

for aBool in (False, True):
    for x in aTuple[:3 if aBool else 1]:
        print(x)
    print()