Python运算符优先级与结合性
Python运算符优先级与结合性
优先级和结合性是 Python 表达式中⽐较重要的两个概念,它们决定了先执⾏表达式中的哪⼀部分。
运算符优先级按从高到低排列Python 运算符优先级
所谓优先级,就是当多个运算符同时出现在⼀个表达式中时,先执⾏哪个运算符。
例如对于表达式a + b * c,Python 会先计算乘法再计算加法;b * c的结果为 8,a + 8的结果为 24,所以 d 最终的值也是 24。先计算*再计算+,说明* 的优先级⾼于+。
Python ⽀持⼏⼗种运算符,被划分成将近⼆⼗个优先级,有的运算符优先级不同,有的运算符优先级相同,请看下表。
结果表1中的运算符优先级,我们尝试分析下⾯表达式的结果:
4+4<<2
+的优先级是 12,<<;的优先级是 11,+的优先级⾼于<<,所以先执⾏ 4+4,得到结果 8,再执⾏ 8<<2,得到结果 32,这也是整个表达式的最终结果。
像这种不好确定优先级的表达式,我们可以给⼦表达式加上( ),也就是写成下⾯的样⼦:
(4+4) << 2
这样看起来就⼀⽬了然了,不容易引起误解。
当然,我们也可以使⽤( )改变程序的执⾏顺序,⽐如:
4+(4<<2)
则先执⾏ 4<<2,得到结果 16,再执⾏ 4+16,得到结果20。
虽然 Python 运算符存在优先级的关系,但我不推荐过度依赖运算符的优先级,这会导致程序的可读性降低。因此,我建议读者:不要把⼀个表达式写得过于复杂,如果⼀个表达式过于复杂,可以尝试把
它拆分来书写。
不要过多地依赖运算符的优先级来控制表达式的执⾏顺序,这样可读性太差,应尽量使⽤( )来控制表达式的执⾏顺序。
Python 运算符结合性
所谓 结合性 ,就是 当⼀个表达式中出现多个优先级相同的运算符时,先执⾏哪个运算符:先执⾏左边的叫左结合性,先执⾏右边的叫右结合性。
例如对于表达式对于100 / 25 * 16,/和*的优先级相同,应该先执⾏哪⼀个呢?这个时候就不能只依赖运算符优先级决定了,还要参考运算符的结合性。/和*都具有左结合性,因此先执⾏左边的除法,再执⾏右边的乘法,最终结果是 64。
Python 中⼤部分运算符都具有左结合性,也就是从左到右执⾏;只有 ** 乘⽅运算符、单⽬运算符(例如 not 逻辑⾮运算符)、赋值运算符和三⽬运算符例外,它们具有右结合性,也就是从右向左执⾏。表 1 中列出了所有 Python 运算符的结合性。
总结
当⼀个表达式中出现多个运算符时,Python 会先⽐较各个运算符的优先级,按照优先级从⾼到低的顺序依次执⾏;
当遇到优先级相同的运算符时,再根据结合性决定先执⾏哪个运算符:如果是左结合性就先执⾏左边的运算符,如果是右结合性就先执⾏右边的运算符。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论