运算符优先级 —— Python教程

本节教程将讲解 Python 运算符的优先级和关联性,在这以前你应该理解了 Python 运算符python

对于表达式,Python 解释器将处理优先级更高的运算符,而且除了指数运算符(**)外,几乎全部运算符的处理方式都从左到右执行。函数

运算符优先级

工做方式

当咱们将值、变量、运算符和函数调用放在一块儿时,就会造成表达式。当表达式执行完后,Python 解释器就会把它认为是有效的表达式。post

像这样:spa

>>> 3 + 4
7
复制代码

3 + 4 是一个表达式,它包含一个运算符和两个操做数。因此,一个复杂的语句能够包含多个运算符。为了执行复杂的表达式,Python 须要列出运算符的优先级,就是要控制程序操做的顺序。code

优先级列表

下面是一个复合表达式包含多个运算符的例子:教程

# 先作乘法再作加法结果就是 17
5 + 4 * 3
复制代码

也能够使用括号 () 更改操做顺序,括号比算数运算符优先级更高:索引

# 先作括号内加法再作乘法结果是 27
(5 + 4) * 3
复制代码

下面用表格列出运算符从高到低的优先级:get

运算符 用法
{ } 括号(分组)
f(args...) 函数调用
x[index:index] 切片
x[index] 索引值
x.attribute 属性
** 指数
~x 取反
+x,-x 正、负值
*、/、% 乘、除、求余
+、- 加、减
<<、>> 左移、右移
& 按位 AND
^ 按位 XOR
| 按位 OR
is、not、in、is、is not、< 、<=、>、>=、<>、!=、== 比较、算数、身份
not x 布尔 NOT
and 布尔 AND
or 布尔 OR
lambda lambda 表达式

关联运算符

上表每组能够有多个运算符,这意味着此组运算符的优先级都相同。因此当多个运算符有相同优先级时,它们之间的关联性就决定了最后的执行顺序。table

处理关联性

当有多个相同优先级运算符一同处理时,除指数(**)外,Python 都将按照从左到右的顺序依次执行。class

举个例子:

# 具备相同优先级,从左到右执行结果为 1
print(4 * 7 % 3)

# 括号有更高优先级,执行结果为 0
print(2 * (10 % 5))
复制代码

提到过其中指数(**)运算符不一样,它是按照从右向左顺序执行:

# 从右到左执行结果为 256
print(4 ** 2 ** 2)

# 括号有更高优先级,可是执行结果还会为 256
print((4 ** 2) ** 2)
复制代码

非关联运算符

Python 中其实还有一些不支持关联性的运算符,例如赋值运算符和比较运算符。因此针对这些非关联运算符有特殊的规则,这就须要咱们特别记忆。

例如表达式 5 < 7 < 9 不能理解成 (5 < 7) < 95 < (7 < 9),而是应该当作 5 < 7 and 7 < 9 且从左到右求值。

还有对语法的支持,像 a = b = c 这样的赋值运算符是可执行的,可是像 a = b += c 就会出现错误。

x = 11, y = 12, z = 13

# 不正确的表达式
# 非关联运算符
# 错误 -> SyntaxError: invalid syntax
x = y += 12
复制代码

(完)

相关文章
相关标签/搜索