注册

Python运算符优先级及结合性

当多个运算符出现在一起需要进行运算时,Python 会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;

当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。

运算符的优先级

在数学运算2 + 4 * 3中,要先计算乘法,再计算加法,否则结果就是错误的。所谓优先级,就是当多个运算符出现在一起时,需要先执行哪个运算符,那么这个运算符的优先级就更高。 

Python中运算符优先级如下表所示,括号的优先级是最高的,无论任何时候优先计算括号里面的内容,逻辑运算符的优先级最低,在表中处在同一行运算符的优先级一致,上一层级的优先级高于下一层级的。算术运算符可以分为四种,幂运算最高,其次是正负号,然后是 “* / // %”,最后才是加减“+ -”。

运算符

描述

()

括号

**

幂运算

~

按位取反

+、-

正号、负号

、/、 %、 //

乘、除、取模、取整除

、-

加、减

>> 、<<

右移、左移

&

按位“与”

、|

按位“异或”,按位“或”

<=  、< 、>、 >=

比较运算符

==、!=

等于、不等于

=、%=、/=、//=、-=、+=、*=、**=

赋值运算符

is、is not

身份运算符

in、not in

成员运算符

and or not

逻辑运算符

运算符的结合性

在多种运算符在一起进行运算时,除了要考虑优先级,有时候还需要考虑结合性。当同时出现多个优先级相同的运算符时,先执行左边的叫左结合性,先执行右边的叫右结合性。如:5 / 2 * 4,由于/*的优先级相同,所以只能参考运算符的结合性了,/*都是左结合性的,所以先计算除法,再计算乘法,结果是10.0。Python中大部分运算符都具有左结合性,其中,幂运算**、正负号、赋值运算符等具有右结合性。

>>> 5 / 2* 4# 左结合性运算符
10.0
>>> 2 ** 2 ** 3# 右结合性,等同于2 ** (2 **3)
256

虽然Python运算符存在优先级的关系,但写程序时不建议写很长的表达式,过分依赖运算符的优先级,比如:2 ** -1 % 3 / 5 ** 3 *4,这样的表达式会大大降低程序的可读性。因此,建议写程序时,遵守以下两点原则,保证运算逻辑清晰明了。

  1. 尽量不要把一个表达式写的过长过于复杂,如果计算过程的确需要,可以尝试将它拆分几部分来写。
  2. 尽量多使用()来控制运算符的执行顺序,使用()可以让运算的先后顺序变得十分清楚。


作者:刘文飞 

来源:https://mp.weixin.qq.com/s/fXzg2L6emlEVCCT-t4Pk6Q





0 个评论

要回复文章请先登录注册