Python 运算符优先级
一个表达式可能有多个要计算的运算符。运算符优先级定义运算符的计算顺序。换句话说,运算符计算的顺序由运算符优先级决定。
如果某个表达式包含多个运算符,则它们的计算顺序由优先顺序确定。例如,请考虑以下表达式
>>> a = 2+3*5
在这里,a 的值是多少?- 是的,它会是 17(先将 3 乘以 5,然后加上 2)还是 25(将 2 和 3 相加,然后乘以 5)?Python 的运算符优先级规则在这里出现。
如果我们只考虑 Python 中的算术运算符,Python 解释器也采用传统的 BODMAS 规则,其中首先计算 括号,然后计算 除法 和 乘法 运算符,然后是 加法 和 减法 运算符。因此,在上面的表达式中,a 将变为 17。
除了运算符优先级之外,运算符的结合性也很重要。如果表达式由具有相同优先级的运算符组成,则结合性将确定顺序。大多数运算符具有从左到右的关联性。这意味着,左侧的运算符在右侧的运算符之前进行评估。
让我们考虑另一个表达式:
>>> b = 10/5*4
在这种情况下,*(乘法)和 /(除法)运算符具有相同的优先级。但是,从左到右关联性规则首先执行除法 (10/5 = 2),然后执行乘法 (2*4 = 8)。
Python 运算符优先级表
下表按优先级降序列出了 Python 中的所有运算符。Operators 列下同一单元格中的运算符具有相同的优先级。
运算符 | 描述 |
---|---|
(),[], {} |
括号和大括号 |
[index], [index:index] |
订阅、切片、 |
await x |
Await 表达式 |
** |
幂运算 |
+x, -x, ~x |
正、负、按位 NOT |
*, @, /, //, % |
乘法、矩阵乘法、除法、向下取整除法、余数 |
+, - |
加法和减法 |
<<, >> |
左移、右移 |
& |
按位 AND |
^ |
按位 XOR |
| |
按位 OR |
in, not in, is, is not, <, <=, >, >=, !=, == |
比较,包括成员身份测试和身份测试 |
not x |
布尔值 NOT |
and |
布尔值 AND |
or |
布尔值 OR |
if – else |
条件表达式 |
lambda |
Lambda 表达式 |
:= |
Walrus 运算符 |
Python 运算符优先级示例
a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d #( 30 * 15 ) / 5
print ("Value of (a + b) * c / d is ", e)
e = ((a + b) * c) / d # (30 * 15 ) / 5
print ("Value of ((a + b) * c) / d is ", e)
e = (a + b) * (c / d); # (30) * (15/5)
print ("Value of (a + b) * (c / d) is ", e)
e = a + (b * c) / d; # 20 + (150/5)
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
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