GEEK
← 返回首页

扩充赋值(Augmented Assignment)是如何工作的?

#随笔

扩充赋值(Augmented Assignment)是一种将运算和赋值合并的简写方式,例如 +=、-=、*= 等。它会先使用变量与右侧值进行运算,再将结果重新赋值给原变量,能够减少重复代码,提高可读性。除了数字外,部分扩充赋值还可以用于字符串,例如 += 拼接字符串、*= 重复字符串,但 Python 不支持 ++ 和 -- 自增、自减运算符

扩充赋值(Augmented Assignment)是如何工作的?

在编写程序时,我们经常需要修改变量的值

例如:

  • 分数增加 10 分
  • 库存减少 1 件
  • 金额乘以折扣
  • 字符串继续拼接新的内容

如果每次都写完整的赋值语句,会显得比较繁琐。

例如:

score = 90

score = score + 10

为了让代码更加简洁,Python 提供了扩充赋值(Augmented Assignment)


什么是扩充赋值?

扩充赋值可以理解为:

先进行运算,再把结果重新赋值给原变量。

例如:

普通写法:

score = score + 10

扩充赋值写法:

score += 10

两种写法完全等价。


扩充赋值的语法

基本语法:

变量 运算符= 值

例如:

x += 5

等价于:

x = x + 5

可以理解为:

先计算:

x + 5

↓

再把结果重新赋值给 x

为什么使用扩充赋值?

相比普通写法:

x = x + 5

扩充赋值:

x += 5

具有以下优点:

  • 代码更简洁
  • 不需要重复写变量名
  • 可读性更高
  • 降低因重复输入变量名导致的错误

因此,在 Python 开发中,扩充赋值是一种非常常见的写法。


加法赋值(+=)

作用:

将右侧的值加到左侧变量,并保存结果。

例如:

my_var = 10

my_var += 5

print(my_var)

输出:

15

等价于:

my_var = my_var + 5

减法赋值(-=)

作用:

将右侧的值从左侧变量中减去,并保存结果。

例如:

count = 14

count -= 3

print(count)

输出:

11

等价于:

count = count - 3

乘法赋值(*=)

作用:

将左侧变量乘以右侧的值,并保存结果。

例如:

product = 65

product *= 7

print(product)

输出:

455

等价于:

product = product * 7

除法赋值(/=)

作用:

将左侧变量除以右侧变量,并保存结果。

例如:

price = 100

price /= 4

print(price)

输出:

25.0

注意:

使用 /= 后,结果通常会变成浮点数(float)。

等价于:

price = price / 4

整除赋值(//=)

作用:

先进行整除(向下取整),再保存结果。

例如:

total_pages = 23

total_pages //= 5

print(total_pages)

输出:

4

计算过程:

23 ÷ 5 = 4.6

↓

向下取整

↓

4

取模赋值(%=)

作用:

计算除法后的余数,并保存结果。

例如:

bits = 35

bits %= 2

print(bits)

输出:

1

因为:

35 ÷ 2 = 17 …… 1

余数为:

1

幂赋值(**=)

作用:

将变量提升到指定的幂,并保存结果。

例如:

power = 2

power **= 3

print(power)

输出:

8

等价于:

power = power ** 3

即:

2³ = 8

字符串也可以使用扩充赋值吗?

可以,但只有部分运算符支持


字符串拼接(+=)

字符串支持:

+=

用于拼接字符串。

例如:

greet = "Hello"

greet += " World"

print(greet)

输出:

Hello World

等价于:

greet = greet + " World"

字符串重复(*=)

字符串还支持:

*=

用于重复字符串。

例如:

greet = "Hello"

greet *= 3

print(greet)

输出:

HelloHelloHello

等价于:

greet = greet * 3

字符串不支持哪些扩充赋值?

字符串不支持

  • -=
  • /=
  • //=
  • %=
  • **=

例如:

greet = "Hello"

greet -= " World"

运行后:

TypeError

原因:

字符串无法进行减法运算。

同样:

greet /= "World"

也会报错。

因此:

只有:

  • +=
  • *=

适用于字符串。


Python 为什么没有 ++ 和 --?

很多学习过 C、C++、Java 或 JavaScript 的同学会问:

为什么 Python 没有:

++

和:

--

答案是:

Python 不支持自增(++)和自减(--)运算符。

例如:

x = 5

x++

这是错误写法。

Python 认为:

x += 1

更加清晰、更容易理解,因此没有提供 ++--


++ 在 Python 中是什么意思?

很多人尝试:

x = 5

print(++x)

输出:

5

为什么没有变成:

6

这是因为:

Python 把:

++x

解释为:

+(+x)

也就是:

连续使用了两次一元加号(Unary Plus)

例如:

x = 5

print(+x)

输出:

5
print(++x)

输出:

5
print(+++x)

输出:

5

无论写几个 +

都不会改变变量的值。

真正增加变量的方法仍然是:

x += 1

或者:

x = x + 1

常见扩充赋值运算符

运算符 等价写法 作用
+= x = x + y 加法赋值
-= x = x - y 减法赋值
*= x = x * y 乘法赋值
/= x = x / y 除法赋值
//= x = x // y 整除赋值
%= x = x % y 取模赋值
**= x = x ** y 幂赋值

字符串支持情况

运算符 是否支持 示例
+= "Hello" += " World"
*= "Hi" *= 3
-= TypeError
/= TypeError
//= TypeError
%= TypeError
**= TypeError

常见错误

❌ 使用 ++ 进行自增

错误写法:

x++

Python 不支持这种语法。

正确写法:

x += 1

❌ 认为 ++x 会加 1

例如:

x = 5

print(++x)

输出:

5

而不是:

6

因为:

++x 只是连续使用两次一元加号,不会修改变量。


❌ 对字符串使用不支持的扩充赋值

例如:

text = "Hello"

text -= "H"

会报:

TypeError

因为字符串不能进行减法运算。


学习小结

知识点 说明
扩充赋值 将运算和赋值合并成一步,例如 +=
常见运算符 +=-=*=/=//=%=**=
优点 写法更简洁,不需要重复变量名。
字符串支持 支持 += 拼接和 *= 重复,不支持减法、除法等运算。
自增、自减 Python 没有 ++--,应使用 += 1-= 1

总结

  • 扩充赋值(Augmented Assignment)将运算和赋值合并为一步,可以让代码更加简洁、清晰。
  • 常见的扩充赋值运算符包括 +=-=*=/=//=%=**=,分别对应不同的数学运算。
  • 字符串只支持 +=(拼接)和 *=(重复),其他扩充赋值运算符都会导致 TypeError
  • Python 为了保持语法清晰,没有提供 ++-- 运算符,需要使用 += 1-= 1 来实现变量的递增和递减。