Python 简明教程

Python Operator Precedence

Python Operator Precedence

一个表达式可能有多个操作符要评估。操作符优先级定义了评估操作符的顺序。换而言之,操作符评估的顺序由操作符优先级决定。

如果某个表达式包含多个运算符,其评估顺序由优先级决定。例如,考虑以下表达式:

>>> a = 2+3*5

此处, a 的值是什么?——是 17(先乘 3 再乘 5)还是 25(先加 2 和 3,再乘 5)?此时 Python 的操作符优先级规则就显现了。

我们仅考虑 Python 中的算术运算符时,传统的 BODMAS 规则也被 Python 解释器所采用,即:先评估 brackets ,再评估 divisionmultiplication ,最后是 additionsubtraction 。因此,a 在上述表达式中将变为 17。

除了操作符优先级外,操作符的结合性也很重要。如果一个表达式由优先级相同的运算符组成,结合性将决定其顺序。大多数运算符从左到右结合。也就是说,左边的运算符先于右边的运算符评估。

我们考虑另一个表达式:

>>> b = 10/5*4

在本例中,*(乘法)和 /(除法)两个运算符具有相同的优先级。但是,从左到右的结合性规则先执行除法(10/5 = 2),然后执行乘法(2*4 = 8)。

Python Operator Precedence Table

以下表格列出了 Python 中所有运算符的递减优先级。Operators 列下同一单元格中的运算符具有相同的优先级。

Sr.No.

Operator & Description

1

(),[], {} Parentheses and braces

2

[index], [index:index] Subscription, slicing,

3

await x Await expression

4

** Exponentiation

5

+x, -x, ~x 正数、负数、按位非

6

*, @, /, //, % 乘法、矩阵乘法、除法、向下取整除法、取余

7

+, - Addition and subtraction

8

<<, >> 左移位、右移位

9

& Bitwise AND

10

^ Bitwise XOR

11

*

* Bitwise OR

12

*in、not in、is、is not、<、⇐、>、>=、!=、== *比较,包括成员身份测试和同等身份测试

13

not x Boolean NOT

14

and Boolean AND

15

or Boolean OR

16

if – else Conditional expression

17

lambda Lambda expression

18

Python Operator Precedence Example

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