运算符优先级及示例
在中学学习数学时,我们遇到了 BODMAS(括号、乘方、除法、乘法、加法和减法)规则,它帮助我们理解在存在多个运算符(of
, x
, /
, +
, -
)时如何计算数学表达式。
在 Python 中,我们有大量的运算符和一个类似的规则来确定表达式的求值顺序。这被称为运算符优先级,其中优先级较高的运算符在表达式中先于优先级较低的运算符进行求值。
下表按从高到低的顺序列出了 Python 中运算符的优先级。同一行中的运算符具有相同的优先级,因此在这种情况下,表达式从左到右求值。
运算符 | 描述 |
---|---|
(expressions...) | 带括号的表达式(分组) |
** | 幂运算 |
+x , -x , ~x | 一元正号、一元负号、按位取反 NOT |
* , @ , / , // , % | 乘法、矩阵乘法、除法、整除、取余 |
+ , - | 加法、减法 |
<< , >> | 移位 |
& | 按位与 AND |
^ | 按位异或 XOR |
| | 按位或 OR |
in , not in , is , is not , < , <= , > , >= , != , == | 成员、身份和比较 |
not x | 布尔 NOT |
and | 布尔 AND |
or | 布尔 OR |
:= | 赋值表达式 |
练习
示例 1
计算表达式
15 - 2 * 4
解
步骤:*
的优先级高于 -
15 - 2 * 4
= 15 - 8
= 7
示例 2
计算表达式
15 - 2 + 4
解
步骤:-
和 +
具有相同的优先级,因此表达式从左到右计算 15 - 2 + 4
= 13 + 4
= 17
示例 3
计算表达式
15 - (2 + 4)
解
带括号的表达式 (...)
具有最高优先级,因此首先计算 +
15 - (2 + 4)
= 15 - 6
= 9
示例 4
计算表达式
3 * 2 + 9 / 4 - 10 % 2 ** 2
步骤 1
**
优先计算 3 * 2 + 9 / 4 - 10 % 2 ** 2
= 3 * 2 + 9 / 4 - 10 % 4
步骤 2
*
, /
和 %
具有相同的优先级,因此它们从左到右计算。 3 * 2 + 9 / 4 - 10 % 4
= 6 + 2.25 - 2
步骤 3
+
和 -
计算 6 + 2.25 - 2
= 6.25
示例 5
计算表达式
20 / 4 // 2 * 2 - 4 + 20
步骤 1
*
, /
, //
具有相同的优先级,因此它们从左到右计算。 20 / 4 // 2 * 2 - 4 + 20
= 5.0 // 2 * 2 - 4 + 20
= 2.0 * 2 - 4 + 20
= 4.0 - 4 + 20
步骤 2
+
和 -
计算 4.0 - 4 + 20
= 20.0
(注意: 实际 Python 运算 20 / 4
结果是 5.0
,5.0 // 2
结果是 2.0
,2.0 * 2
结果是 4.0
,4.0 - 4 + 20
结果是 20.0
. 之前步骤的整数计算是为简化理解,这里是精确结果)
示例 6
计算表达式
not 6 <= 4 and 3 ** 3 > 12 / 3
步骤 1
**
优先计算 not 6 <= 4 and 3 ** 3 > 12 / 3
= not 6 <= 4 and 27 > 12 / 3
步骤 2
/
是下一个优先级 not 6 <= 4 and 27 > 12 / 3
= not 6 <= 4 and 27 > 4.0
步骤 3
比较运算符是下一个优先级 not 6 <= 4 and 27 > 4.0
= not False and True
步骤 4
计算布尔 NOT
not False and True
= True and True
步骤 5
计算布尔 AND
True and True
= True