在Python编程语言中,运算符的优先级是指在一个包含多个运算符的表达式中,哪个运算符应该先被执行。例如,在表达式“a + b * c”中,Python会优先执行乘法运算,然后再进行加法运算。本教程对 Python 中运算符的优先顺序进行了总结。
一、运算符优先级
下表对 Python 中运算符的优先顺序进行了总结,从最高优先级(最先绑定)到最低优先级(最后绑定)。 相同单元格内的运算符具有相同优先级。 除非语法显式地指明,否则运算符均为双目运算符。 相同单元格内的运算符从左至右组合的(只有幂运算符是从右至左组合的)。
请注意比较、成员检测和标识号检测均为相同优先级,并具有如《Python比较运算》所描述的从左至右串连特性。
运算符 | 描述 |
(expressions…),
[expressions…], {key: value…}, {expressions…} |
绑定或加圆括号的表达式,列表显示,字典显示,集合显示 |
x[index], x[index:index], x(arguments…), x.attribute | 抽取,切片,调用,属性引用 |
await x | await 表达式 |
** | 乘方 5 |
+x, -x, ~x | 正,负,按位非 NOT |
*, @, /, //, % | 乘,矩阵乘,除,整除,取余 6 |
+, – | 加和减 |
<<, >> | 移位 |
& | 按位与 AND |
^ | 按位异或 XOR |
| | 按位或 OR |
in, not in, is, is not, <, <=, >, >=, !=, == | 比较运算,包括成员检测和标识号检测 |
not x | 布尔逻辑非 NOT |
and | 布尔逻辑与 AND |
or | 布尔逻辑或 OR |
if — else | 条件表达式 |
lambda | lambda 表达式 |
:= | 赋值表达式 |
二、运算符优先级顺序
Python 运算符优先级从高到低如下:
1、**:幂运算
2、~, +, -:按位取反,正号,负号
3、*, /, %, //:乘,除,取模,整除
4、+, -:加,减
5、<<, >>:左移,右移
6、&:按位与
7、^:按位异或
8、|:按位或
9、==, !=, >, >=, <, <=, is, is not, in, not in:比较运算符,包括身份运算符和成员运算符
10、not:布尔“非”
11、and:布尔“与”
12、or:布尔“或”
三、结合性
与运算符优先级相关的另一个重要概念是结合性,它决定了同一种运算符是从左往右计算,还是从右往左。例如:
>>>2**2**23 256 >>>(2++2)**3 64 >>>2**(2**3) 256
大多数运算符都是从左往右开始计算的,简称左结合性,只有少部分运算符具有右结合性。下面是右结合性运算符列表:
按位取反(位非)、正负号、位与、逻辑非、赋值系列运算符。