本节课知识点很容易踩坑,学习过后欢迎在评论区留下你的疑问、测试代码,大家一同交流学习!
一、课程前言
前面我们已经学完全部7大类运算符:算术、赋值、比较、逻辑、位、成员、身份运算符。
当一条代码里面同时出现多种运算符时,Python拥有固定的执行先后顺序,也就是运算符优先级。
优先级越高,越先进行计算;优先级相同,则按照结合方向依次运算。
简单类比数学规则:先乘除、后加减,括号永远最先计算。
二、基础概念详解
1. 什么是运算符优先级
优先级就是表达式的运算先后等级。多条运算符写在一起,等级高的优先执行。
举个基础例子:3 + 4 * 5
乘法优先级高于加法,程序先算4×5=20,再计算3+20,最终结果等于23,而不是从左往右依次计算得到35。
2. 结合方向(特殊知识点)
1. 绝大多数运算符:左结合,同级运算符从左边往右边依次运算
2. 幂运算、一元正负号:右结合,从右侧开始计算
示例:2 ** 3 ** 2 等价于 2 ** (3**2),结果为512,不是(2**3)**2=64
3. 完整优先级总表(由最高→最低)
运算符 | 功能说明 |
() | 小括号,优先级最高,强制优先计算括号内部 |
** | 指数、幂运算 |
~、+、- | 按位取反、一元正号、一元负号 |
* 、/ 、%、 // | 乘法、除法、取模、整数除法 |
+ - | 加法、减法 |
>>、<< | 右移、左移(位移动运算符) |
& | 位与 |
^ 、| | 位异或、位或 |
<=、<、>、>= | 大小比较运算符 |
==、!= | 等于、不等于判断 |
=、%=、/=、//=、-=、+=、*=、**= | 复合赋值运算符 |
is、is not | 身份运算符 |
in、not in | 成员运算符 |
not、and、or | 逻辑运算符,优先级:not>and>or |
4. 通俗层级记忆口诀
括号>幂运算>单目符号>乘除取整取余>加减>位移>位运算>比较>赋值>身份>成员>逻辑
简化版:算术 > 比较 > 身份成员 > 逻辑 > 赋值
三、代码实操案例
案例1:基础算术优先级演示
# 先乘除后加减print(5 + 3 * 4)# 括号优先运算print((5 + 3) * 4)
运行结果:
案例2:幂运算右结合易错示例
# 从右侧开始计算print(2 ** 3 ** 2)# 手动添加括号等价写法print(2 ** (3 ** 2))# 和左结合结果做区分print((2 ** 3) ** 2)
运行结果:
案例3:一元负号和幂运算陷阱(高频错题)
print(-2 ** 2)# 运算顺序:先计算2的平方,再添加负号,结果为‑4print((-2) ** 2)# 括号包裹负数,结果等于4
运行结果:
案例4:多种运算符混合(算术+比较+逻辑)
a = 6# 运算顺序:先乘法→再大小对比→and最后执行print(a + 2 > 5 and a * 3 < 30)
分步拆解:
a+2=8;a*3=188>5 → True;18<30 → TrueTrue and True → True
案例5:逻辑运算符内部优先级 not>and>or
print(True or False and False)# 优先计算False and False,之后执行or判断# 等价于 True or (False and False)
输出结果:True
四、重点特殊知识点 & 避坑指南
1. 小括号优先级永远最高,拿不准运算顺序,直接添加括号,是新手最稳妥的办法,同时提升代码可读性
2. 幂运算**、正负号为右结合,其余大部分运算符从左向右运算
3. 逻辑运算符固定等级:not(取反)>and(与)>or(或)
4. 位运算符优先级高于比较运算符,5 & 3 ==1会优先执行3==1;正确写法需要添加括号 (5 & 3) ==1
5. 赋值运算符优先级整体最低,整条表达式计算完毕之后,最后才会完成赋值
五、课后练习题(共3题)
习题1(基础计算题)
写出运行结果:4 + 6 * (8 - 3)
习题2(易错题)
请说出 -3**2 的运行结果,并写出可以得到9的代码写法
习题3(综合应用题)
分析表达式 `3>1 or 5<2 and 6>2` 的运算顺序,输出最终布尔结果
混合运算符的运算顺序很容易出错,你可以多敲几组代码测试,如果有看不懂、运行出错的地方,可以在评论区留言,一起解决问题!