扩充赋值(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来实现变量的递增和递减。