python增量运​​算符在一行条件语句中具有奇怪的行为

时间:2018-08-29 15:25:51

标签: python increment

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

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))

输出:

this is good: 10000
now this is weird: 10000
that's better: 0

所以这是一个简单的解决方法,但是为什么IDCTER在超过maxid之后仍不重置?

1 个答案:

答案 0 :(得分:8)

的运算符优先级

idcter += 1 if (idcter <= maxid) else 0

通过以下分组可视化

idcter += (1 if (idcter <= maxid) else 0)

这意味着如果条件不成立,您将增加 0

将其与

进行比较
idcter = idcter + 1 if (idcter <= maxid) else 0
# ==
idcter = (idcter + 1) if (idcter <= maxid) else 0

在同一情况下您分配 0 的地方

顺便说一句,10000已超过您maxid的{​​{1}}。实现这种复位增量的一种典型方法是使用模运算符。就您而言:

9999