一个表达式可能包含多个需要计算的运算符。运算符优先级定义了运算符被评估的顺序。换句话说,运算符的评估顺序由运算符优先级决定。
如果某个表达式包含多个运算符,它们的评估顺序将由优先级顺序决定。例如,考虑下面的表达式:
>>> a = 2 + 3 * 5
这里,a
的值将会是什么?——是17(先乘以3和5,然后加上2)还是25(先加2和3,然后乘以5)?Python的运算符优先级规则在这里发挥了作用。
如果我们只考虑Python中的算术运算符,传统的BODMAS规则也被Python解释器采用,其中括号内的表达式首先被评估,接着是除法和乘法运算符,最后是加法和减法运算符。因此,在上面的表达式中,a
将会变成17。
除了运算符优先级外,运算符的结合性也很重要。如果一个表达式包含相同优先级的运算符,那么结合性决定了运算的顺序。大多数运算符具有从左到右的结合性。这意味着,左边的运算符首先被评估,然后才是右边的。
让我们考虑另一个表达式:
>>> b = 10 / 5 * 4
在这个情况下,*
(乘法)和/
(除法)运算符具有相同的优先级。然而,从左到右的结合性规则首先执行除法(10 / 5 = 2),然后执行乘法(2 * 4 = 8)。
Python运算符优先级表
下表列出了Python中所有运算符按照优先级递减的顺序。在同一单元格下的“运算符”列中的运算符具有相同的优先级。
序号 |
运算符 & 描述 |
1 |
(), [], {} |
2 |
[index], [index:index] |
3 |
await x |
4 |
** |
5 |
+x, -x, ~x |
6 |
*, @, /, //, % |
7 |
+, - |
8 |
<<, >> |
9 |
& |
10 |
^ |
11 |
|
12 |
in, not in, is, is not, <, <=, >, >=, !=, == |
13 |
not x |
14 |
and |
15 |
or |
16 |
if – else |
17 |
lambda |
18 |
:= |
Python运算符优先级示例
a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d
print("Value of (a + b) * c / d is ", e)
e = ((a + b) * c) / d
print("Value of ((a + b) * c) / d is ", e)
e = (a + b) * (c / d);
print("Value of (a + b) * (c / d) is ", e)
e = a + (b * c) / d;
print("Value of a + (b * c) / d is ", e)
当你执行上述程序时,它会产生以下结果:
Value of (a + b) * c / d is 90.0
Value of ((a + b) * c) / d is 90.0
Value of (a + b) * (c / d) is 90.0
Value of a + (b * c) / d is 50.0