Python - 运算符优先级



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