非增强赋值 (PLR6104)
源自 Pylint 代码检查工具。
修复总是可用的。
此规则不稳定且处于预览状态。使用需要 --preview
标志。
作用
检查可以被替换为增强赋值语句的赋值。
为什么这不好?
如果赋值语句的右侧包含一个二元运算,其中一个操作数与赋值目标相同,则可以将其重写为增强赋值。 例如,x = x + 1
可以重写为 x += 1
。
在执行此类操作时,增强赋值更简洁且符合习惯用法。
已知问题
在某些情况下,此规则不会检测到目标位于二元运算右侧的赋值(例如,x = y + x
,而不是 x = x + y
),因为对于某些数据类型(例如字符串),此类运算不可交换。
例如,x = "prefix-" + x
与 x += "prefix-"
不等效,而 x = 1 + x
与 x += 1
等效。
如果无法轻易推断左侧的类型,则该规则将忽略该赋值。
示例
建议改为
修复安全性
此规则的修复被标记为不安全,因为当目标是可变数据类型(如列表或字典)时,增强赋值具有不同的语义。
例如,考虑以下情况
如果赋值被替换为增强赋值,则更新操作将应用于 foo
和 bar
,因为它们引用同一个对象