python increment运算符在一行条件语句中有奇怪的行为

wea*_*guy 0 python increment

idcter超过时为什么不重置为0 maxid

maxid=9999
idcter=9999
idcter += 1 if(idcter <= maxid) else 0
print('this is good: ' + str(idcter))

idcter += 1 if(idcter <= maxid) else 0
print('now this is weird: ' + str(idcter))

idcter=10000
idcter = idcter + 1 if(idcter <= maxid) else 0
print("that's better: " + str(idcter))
Run Code Online (Sandbox Code Playgroud)

输出:

this is good: 10000
now this is weird: 10000
that's better: 0
Run Code Online (Sandbox Code Playgroud)

所以这是一个简单的修复,但是为什么在超过之后会不会重置maxid

sch*_*ggl 8

运算符的优先级

idcter += 1 if (idcter <= maxid) else 0
Run Code Online (Sandbox Code Playgroud)

通过以下分组可视化

idcter += (1 if (idcter <= maxid) else 0)
Run Code Online (Sandbox Code Playgroud)

这意味着如果条件不成立, 0递增.

比较那个

idcter = idcter + 1 if (idcter <= maxid) else 0
# ==
idcter = (idcter + 1) if (idcter <= maxid) else 0
Run Code Online (Sandbox Code Playgroud)

您在同一案例中分配 0 给结果的位置.

顺便说一句,10000已经超过你maxid9999.实现这种重置增量的一种典型方法是使用模运算符.在你的情况下:

idcter = (idcter+1) % (maxid+1)  # 9997 -> 9998 -> 9999 -> 0 -> 1
Run Code Online (Sandbox Code Playgroud)