Python的运算优先级

Python的运算优先级Python运算符优先级和结合性一览表
< Python三目运算符列表、元组、字典和集合 >
Python一对一答疑,帮助有志青年!使用QQ在线辅导,哪里不懂问哪里,整个过程都是一对一,学习更有针对性。和作者直接交流,不但提升技能,还提升 Level;当你决定加入我们,你已然超越了 90% 的程序员。猛击这里了解详情。
优先级和结合性是 Python 表达式中比较重要的两个概念,它们决定了先执行表达式中的哪一部分。
Python 运算符优先级

所谓优先级,就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。

例如对于表达式a + b * c,Python 会先计算乘法再计算加法;b * c的结果为 8,a + 8的结果为 24,所以 d 最终的值也是 24。先计算再计算+,说明的优先级高于+。

Python 支持几十种运算符,被划分成将近二十个优先级,有的运算符优先级不同,有的运算符优先级相同,请看下表。

表 1 Python 运算符优先级和结合性一览表
运算符说明 Python运算符 优先级 结合性 优先级顺序
小括号 ( ) 19 无 高
︿
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|

索引运算符 x[i] 或 x[i1: i2 [:i3]] 18 左
属性访问 x.attribute 17 左
乘方 ** 16 右
按位取反 ~ 15 右
符号运算符 +(正号)、-(负号) 14 右
乘除 *、/、//、% 13 左
加减 +、- 12 左
位移 >>、<< 11 左
按位与 & 10 右
按位异或 ^ 9 左
按位或 | 8 左
比较运算符 ==、!=、>、>=、<、<= 7 左
is 运算符 is、is not 6 左
in 运算符 in、not in 5 左
逻辑非 not 4 右
逻辑与 and 3 左
逻辑或 or 2 左
逗号运算符 exp1, exp2 1 左
结果表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 会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值