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 列中同一单元格中的运算符具有相同的优先级。

序号 运算符及描述
1

(),[], {}

圆括号和方括号

2

[索引], [索引:索引]

下标,切片

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

lambda 表达式

18

:=

沃尔拉斯运算符

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
广告