搞定 Python 运算符
在 Python 编程的世界里,运算符就像 “魔法积木”,能将变量、常量等 “零件” 组合起来,实现数据计算、逻辑判断、赋值等各种核心功能。无论是简单的数值相加,还是复杂的条件筛选,都离不开运算符的支撑。本文将从基础到进阶,系统梳理 Python 中常用的运算符,帮你彻底掌握这一核心知识点。
一、赋值运算符:给变量 “赋予生命”
赋值运算符是 Python 中最基础也最常用的运算符,作用是将右侧的值或表达式结果,赋给左侧的变量。它就像给变量 “贴上标签”,让变量拥有具体的 “身份”。
1. 基础赋值:=
这是最核心的赋值运算符,注意与数学中的 “等于” 区分,在 Python 中它表示 “赋值” 动作,而非判断相等。
# 给变量 a 赋值为 10
a = 10
# 将表达式 3*5 的结果赋给变量 b
b = 3 * 5
print(a) # 输出:10
print(b) # 输出:15
2. 复合赋值:+=、-=、*= 等
当需要对变量进行 “先运算,再赋值” 的操作时,复合赋值运算符能让代码更简洁。它本质是 “变量 = 变量 运算符 数值” 的简写形式。
常见复合赋值运算符及示例如下:
| 运算符 | 含义 | 示例 | 等价写法 |
|---|---|---|---|
+= |
加法赋值 | x += 3 |
x = x + 3 |
-= |
减法赋值 | x -= 2 |
x = x - 2 |
*= |
乘法赋值 | x *= 4 |
x = x * 4 |
/= |
除法赋值 | x /= 2 |
x = x / 2 |
//= |
整除赋值 | x //= 3 |
x = x // 3 |
%= |
取余赋值 | x %= 5 |
x = x % 5 |
**= |
幂运算赋值 | x **= 2 |
x = x ** 2 |
x = 5
x += 3 # 等价于 x = 5 + 3
print(x) # 输出:8
x *= 2 # 等价于 x = 8 * 2
print(x) # 输出:16
x %= 3 # 等价于 x = 16 % 3(16除以3余1)
print(x) # 输出:1
二、算术运算符:实现数值 “加减乘除”
算术运算符用于对数值类型(整数 int、浮点数 float 等)进行数学运算,是处理数值计算的核心工具。
1. 基本算术运算符
包括加、减、乘、除等,与数学中的运算逻辑基本一致,但需注意除法的特殊性。
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
+ |
加法 | 3 + 5 |
8 |
- |
减法 | 10 - 4 |
6 |
* |
乘法 | 2 * 6 |
12 |
/ |
除法 | 15 / 2 |
7.5(结果必为浮点数) |
// |
整除 | 15 // 2 |
7(向下取整,忽略小数部分) |
% |
取余(模运算) | 15 % 2 |
1(返回除法后的余数) |
** |
幂运算 | 2 ** 3 |
8(2 的 3 次方,等价于 pow(2,3)) |
2. 关键注意点
- 除法
/:无论是否能整除,结果都为浮点数。例如4 / 2结果是2.0,而非2。 - 整除
//:向下取整规则对负数同样生效。例如7 // 3 = 2,但-7 // 3 = -3(因为-3比-2.333更小)。 - 取余
%:结果的符号与除数一致。例如7 % 3 = 1,7 % (-3) = -2,-7 % 3 = 2。
示例代码:
# 除法与整除的区别
print(10 / 3) # 输出:3.3333333333333335
print(10 // 3) # 输出:3
# 负数的整除与取余
print(-10 // 3) # 输出:-4(向下取整)
print(10 % (-3)) # 输出:-2(与除数-3符号一致)
# 幂运算
print(3 ** 4) # 输出:81(3*3*3*3)
print(4 ** 0.5) # 输出:2.0(开平方,等价于 math.sqrt(4))
三、比较运算符:判断 “是与非”
比较运算符用于比较两个值的关系,结果始终是布尔值(True 表示 “成立”,False 表示 “不成立”)。它常与条件语句(if)、循环语句(while)搭配使用,是实现逻辑分支的基础。
1. 常用比较运算符
| 运算符 | 名称 | 示例 | 结果 |
|---|---|---|---|
== |
等于 | 5 == 5 |
True |
!= |
不等于 | 5 != 3 |
True |
> |
大于 | 7 > 10 |
False |
< |
小于 | 2 < 4 |
True |
>= |
大于等于 | 6 >= 6 |
True |
<= |
小于等于 | 8 <= 5 |
False |
2. 实用技巧:连续比较
Python 支持 “连续比较”,无需像其他语言那样用逻辑运算符连接,代码更简洁。例如:
x = 5
# 判断 x 是否在 3 到 10 之间
print(3 < x < 10) # 输出:True,等价于 3 < x and x < 10
y = 12
print(5 <= y <= 10) # 输出:False
3. 注意:== 与 is 的区别
==:比较的是值是否相等,只要两个对象的 “内容” 一致,结果就为True。is:比较的是内存地址是否相同(即是否为同一个对象),与值无关。
示例:
a = [1, 2, 3]
b = [1, 2, 3]
print(a == b) # 输出:True(值相等)
print(a is b) # 输出:False(a和b是两个不同的列表对象,内存地址不同)
c = a
print(a is c) # 输出:True(c指向a的内存地址,是同一个对象)
四、逻辑运算符:组合 “条件判断”
逻辑运算符用于连接多个布尔值(或可转换为布尔值的表达式),实现更复杂的逻辑判断。Python 中的逻辑运算符有 and(与)、or(或)、not(非)三种,遵循 “短路求值” 规则。
1. 逻辑运算符规则
| 运算符 | 名称 | 逻辑规则 | 短路特性 |
|---|---|---|---|
and |
逻辑与 | 所有条件都为 True,结果才为 True;只要有一个为 False,结果为 False |
左侧为 False 时,右侧不再计算 |
or |
逻辑或 | 只要有一个条件为 True,结果就为 True;所有条件为 False,结果才为 False |
左侧为 True 时,右侧不再计算 |
not |
逻辑非 | 对条件取反,True 变 False,False 变 True |
无短路,直接取反 |
2. 短路求值示例
短路求值能提高代码效率,避免不必要的计算:
python
运行
# and 短路:左侧为False,右侧的 1/0(会报错)不会执行
print(False and (1 / 0)) # 输出:False(无报错)
# or 短路:左侧为True,右侧的 1/0 不会执行
print(True or (1 / 0)) # 输出:True(无报错)
# not 无短路
print(not (5 > 3)) # 输出:False(先计算 5>3 为True,再取反)
3. 布尔值转换
除了直接使用布尔值,Python 中所有数据类型都能通过 “真值测试” 转换为布尔值:
- 视为
False的值:0、0.0、""(空字符串)、[](空列表)、{}(空字典)、None等。 - 视为
True的值:非零数值、非空字符串 / 列表 / 字典等。
示例:
python
运行
# 空列表视为False,非空字符串视为True
print([] and "hello") # 输出:[](and 结果取第一个False值)
print(0 or [1,2]) # 输出:[1,2](or 结果取第一个True值)
print(not "") # 输出:True(空字符串视为False,取反后为True)
五、位运算符:直接操作 “二进制位”
位运算符直接对整数的二进制位(0 和 1)进行操作,常用于底层开发、性能优化(如权限控制、状态标记)等场景。对于日常业务开发,位运算符使用频率较低,但理解它能帮你更深入地理解计算机数据存储逻辑。
1. 常用位运算符
假设 a = 6(二进制 0110),b = 3(二进制 0011),各运算符效果如下:
| 运算符 | 名称 | 规则 | 示例(a=6, b=3) | 结果(二进制) | 结果(十进制) | ||
|---|---|---|---|---|---|---|---|
& |
按位与 | 对应位都为 1,结果为 1;否则为 0 | a & b |
0010 |
2 |
||
| ` | ` | 按位或 | 对应位有一个为 1,结果为 1;否则为 0 | `a | b` | 0111 |
7 |
^ |
按位异或 | 对应位不同为 1,相同为 0 | a ^ b |
0101 |
5 |
||
~ |
按位取反 | 0 变 1,1 变 0(包含符号位) | ~a |
...11111001 |
-7 |
||
<< |
左移 | 所有位向左移 n 位,右侧补 0 | a << 1 |
1100 |
12 |
||
>> |
右移 | 所有位向右移 n 位,左侧补符号位 | a >> 1 |
0011 |
3 |
2. 实用场景示例:权限控制
用二进制位表示不同权限(每一位代表一个权限,1 表示拥有,0 表示没有):
python
运行
# 定义权限:每一位代表一个功能(1<<n 表示第n位为1)
READ = 1 # 0001(读权限)
WRITE = 2 # 0010(写权限)
DELETE = 4 # 0100(删权限)
ADMIN = 8 # 1000(管理员权限)
# 给用户分配权限:读 + 写(用 | 组合权限)
user_perm = READ | WRITE
print(user_perm) # 输出:3(二进制 0011)
# 检查用户是否有读权限(用 & 判断,结果非0表示拥有)
has_read = (user_perm & READ) != 0
print(has_read) # 输出:True
# 检查用户是否有删权限
has_delete = (user_perm & DELETE) != 0
print(has_delete) # 输出:False
# 给用户添加删权限
user_perm |= DELETE
print(user_perm) # 输出:7(二进制 0111)
# 给用户移除写权限
user_perm &= ~WRITE
print(user_perm) # 输出:5(二进制 0101,只剩读和删权限)
六、运算符优先级:解决 “先算什么” 的问题
当一个表达式中包含多个运算符时,Python 会按照 “优先级” 决定计算顺序,优先级高的先执行。如果优先级相同,则按 “结合性”(从左到右或从右到左)执行。
1. 常用运算符优先级(从高到低)
- 括号
():优先级最高,可强制改变计算顺序(推荐多用括号,让代码更清晰)。 - 幂运算
**:右结合性(如2**3**2 = 2^(3^2) = 512)。 - 位取反
~、逻辑非not。 - 算术运算符:
*、/、//、%优先级高于+、-。 - 位运算符:
<<、>>高于&,&高于^,^高于|。 - 比较运算符:
==、!=、>、<、>=、<=。 - 逻辑运算符:
and优先级高于or。 - 赋值运算符:
=、+=、-=等(优先级最低)。
2. 示例:优先级与括号的作用
python
运行
# 未加括号:先算乘法,再算加法
print(2 + 3 * 4) # 输出:14(3*4=12,2+12=14)
# 加括号:先算加法,再算乘法
print((2 + 3) * 4) # 输出:20(2+3=5,5*4=20)
# 逻辑与和或的优先级
print(True or False and False) # 输出:True(先算and,再算or)
print((True or False) and False) # 输出:False(括号改变顺序)
# 赋值运算符优先级最低
x = 3 + 5 * 2
print(x) # 输出:13(先算3+5*2=13,再赋值给x)
七、总结:运算符的 “实战心法”
- 优先用括号:当表达式复杂时,不必死记优先级,用括号明确计算顺序,既能避免错误,又能让代码更易读。
- 简洁为王:复合赋值运算符(
+=、*=等)和连续比较(3 < x < 10)能让代码更简洁,减少冗余。 - 短路求值:善用
and和or的短路特性,例如if x is not None and x > 0,避免x为None时执行x>0报错。 - 位运算场景:位运算在性能敏感、底层控制场景(如权限、状态标记)中优势明显,但日常开发不必过度使用,以免降低代码可读性。
运算符是 Python 编程的 “基石”,掌握它们能让你更灵活地处理数据和逻辑。建议结合实际场景多写代码练习(比如用算术运算符处理数值统计、用逻辑运算符实现多条件筛选),才能真正将知识内化为能力。
更多推荐

所有评论(0)