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

2024-09-30 20:39:15 发布

您现在位置:Python中文网/ 问答频道 /正文

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

输出:

^{pr2}$

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


Tags: ifthatisthiselsenow重置good
1条回答
网友
1楼 · 发布于 2024-09-30 20:39:15

的运算符优先级

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

由以下分组可视化

^{pr2}$

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

比较一下

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

其中,0分配给相同情况下的结果。在

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

idcter = (idcter+1) % (maxid+1)  # 9997 -> 9998 -> 9999 -> 0 -> 1

相关问题 更多 >