Python复合赋值运算符的运算优先级为何与常规表达式不同?
Python复合赋值运算符的优先级问题解答
这种情况是始终存在的,核心原因是复合赋值运算符的优先级规则和普通表达式的运算逻辑存在明确区别:
对于表达式
x = x / 2 * 3:/和*属于同级算术运算符,遵循左到右的结合性执行。初始x=6时,先计算6/2=3,再计算3*3=9.0,结果符合常规的左到右运算逻辑。对于复合赋值语句
x /= 2 * 3:
Python中所有复合赋值运算符(/=、+=、*=等)的优先级低于普通算术运算符。因此会先完整计算赋值号右侧的表达式2*3=6,再执行x = x / 6,也就是6/6=1.0。
这个规则是Python的固定语法规范,并非特例。再举个同类例子验证:若初始x=10,执行x += 3 * 2时,会先算3*2=6,再执行10+6=16,而非(10+3)*2=26,和你遇到的除法场景逻辑完全一致。
本质上,复合赋值语句的执行逻辑可以理解为:先计算右侧整个表达式的结果,再将该结果与左侧变量执行对应的运算后重新赋值给变量。
内容的提问来源于stack exchange,提问作者chilly8063
相关产品推荐
相关产品推荐

