复合赋值运算符(如+=、-=等)是“先运算再赋值”的简洁写法,提升可读性与安全性,避免重复书写变量名导致的错误,并在可变对象操作中可能产生原地修改等语义差异。

赋值运算符 = 是给变量赋予一个新值,而复合赋值(如 +=、-=、*= 等)在赋值的同时完成一次运算,让代码更简洁、可读性更强,也减少重复书写变量名的出错可能。
常见复合赋值运算符及对应写法
它们本质上是“先运算,再赋值”的缩写:
-
a += b等价于a = a + b -
a -= b等价于a = a - b -
a *= b等价于a = a * b -
a /= b等价于a = a / b -
a %= b等价于a = a % b -
a **= b等价于a = a ** b(Python 中支持) -
a //= b等价于a = a // b(整除,Python 特有)
为什么用复合赋值更安全、更清晰
当变量名较长或表达式较复杂时,重复写两次容易出错或漏改。比如:
❌ 不推荐(冗长且易错):user_profile_data['settings']['notifications']['count'] = user_profile_data['settings']['notifications']['count'] + 1
✅ 推荐(简洁明确):user_profile_data['settings']['notifications']['count'] += 1
不仅少打一串字符,还避免了因手误导致左右不一致的问题(例如右边写成 ...['counts'])。
注意:复合赋值不是简单替换,有执行顺序和类型影响
某些情况下,复合赋值的行为和显式拆开写并不完全等价,尤其涉及可变对象或重载操作符时:
- 对列表使用
+=:如果右操作数是可迭代对象,list += [1,2]实际调用的是extend(),会原地修改列表;而list = list + [1,2]会创建新列表。 - 字符串不可变,
s += 'x'和s = s + 'x'效果一样,但前者语义更直白。 - 自定义类中若只实现了
__add__但没实现__iadd__,那么+=会退化为+再赋值;反之,若实现了__iadd__,就可能支持就地修改。
实际编码中的小建议
日常写循环累加、计数、拼接、缩放等场景,优先用复合赋值:
- 计数:
counter += 1比counter = counter + 1更自然 - 累加总和:
total += price * quantity - 字符串构建(少量时):
log_msg += f"[{level}] {msg}" - 位运算:
flags |= READ_PERMISSION比flags = flags | READ_PERMISSION更符合惯例
不复杂但容易忽略。

















