Python运算符优先级和结合性一览表

优先级和结合性是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<<21复制代码类型:[python]

+的优先级是12,<<的优先级是11,+的优先级高于<<,所以先执行4+4,得到结果8,再执行8<<2,得到结果32,这也是整个表达式的最终结果。

像这种不好确定优先级的表达式,我们可以给子表达式加上(),也就是写成下面的样子:

(4+4) << 21复制代码类型:[python]

这样看起来就一目了然了,不容易引起误解。

当然,我们也可以使用()改变程序的执行顺序,比如:

4+(4<<2)1复制代码类型:[python]

则先执行4<<2,得到结果16,再执行4+16,得到结果20。

虽然Python运算符存在优先级的关系,但我不推荐过度依赖运算符的优先级,这会导致程序的可读性降低。因此,我建议读者:

不要把一个表达式写得过于复杂,如果一个表达式过于复杂,可以尝试把它拆分来书写。

不要过多地依赖运算符的优先级来控制表达式的执行顺序,这样可读性太差,应尽量使用()来控制表达式的执行顺序。

Python运算符结合性

所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。

例如对于表达式对于100/25*16,/和*的优先级相同,应该先执行哪一个呢?这个时候就不能只依赖运算符优先级决定了,还要参考运算符的结合性。/和*都具有左结合性,因此先执行左边的除法,再执行右边的乘法,最终结果是64。

Python中大部分运算符都具有左结合性,也就是从左到右执行;只有**乘方运算符、单目运算符(例如not逻辑非运算符)、赋值运算符和三目运算符例外,它们具有右结合性,也就是从右向左执行。表1中列出了所有Python运算符的结合性。

总结

当一个表达式中出现多个运算符时,Python会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。

(0)

相关推荐

  • (运算符)乐创DIY C语言讲义​——3.7节(3)

    5.    杂项运算符 C语言中还有几种运算符,我们将之归类为"杂项运算符".这些"杂项运算符"包括三目运算符,sizeof,取变量地址运算符和指向运算符.如图 ...

  • 2.5. 运算符与表达式 |《Python 简明教程 2018》| Python 技术论坛

    运算符与表达式# 通常你所写出的程序语句(逻辑行)会包含若干表达式. 如 2 + 3 即为一个简单的表达式.表达式由运算符与操作数构成. 运算符是一些可以用 + 号或其他关键词符号替代的功能.运算符会 ...

  • Python入门:Python基本运算符汇总

    Python入门第五步熟练Python基本运算符,之前的文章中我们已经对于Python下载安装以及专属编码pycharm的下载安装都做了详细介绍,基本语法以及变量数据等等的讲解,今天咱们一起来学一下P ...

  • Python运算符及优先级顺序

    来自:https://www.cnblogs.com/hepeilinnow/p/9737590.htmlPython语言是一门脚本语言,支持面向对象.面向过程编程,兼具编译性和解释性的动态语言,整理 ...

  •  c语言运算符优先级,结合性(左/右结合详解)

    重新翻了遍c语言,觉得对c语言运算符结合性有必要提一下,毕竟去年我自己刚学c语言的时候,就没搞明白结合性的问题.什么是左结合?什么是右结合?它们是干嘛用的?它们是什么时候用的?本文将围绕这几个问题展开 ...

  • Python运算符分为哪些?这几类最常见!

    说起Python运算符,相信很多人都听说过,但对它的了解并不是很多,甚至不知道它有哪些分类,接下来跟着小编一起来看看吧. Python中运算符是一种特殊的符号,用以表示数据的运算.赋值和比较等. 运算 ...

  • 第四课:Python运算符大全与pycharm常用快捷键合集!

    pycharm中常用的快捷键 1.Ctrl+c复制 2.Ctrl+v粘贴 3.Ctrl+d直接将本行复制粘贴至下一行 4.Ctrl+/(?)注释(被注释的代码将无法被运行,跟被删掉差不多,但代码依然保 ...

  • Python运算符是否只有加减乘除?

    数学法中的加减乘除,是运算符,但Python的运算符更加多样和复杂,分为算术运算符.比较运算符.赋值运算符.位运算符.逻辑运算符.成员运算符.身份运算符.为更加直观地了解运算符的用法,本文采用代码与注 ...

  • Python 运算符 | 菜鸟教程

    什么是运算符? 本章节主要说明Python的运算符.举个简单的例子 4 +5 = 9 .例子中,4 和 5 被称为操作数,"+" 称为运算符. Python语言支持以下类型的运算符 ...

  • ubuntu BASH 中的重定向运算符优先级

    此命令不起作用: $ sudo echo 3 > /proc/sys/vm/drop_caches bash: /proc/sys/vm/drop_caches: Brak dostępu 但是 ...

  • Python 运算符重载

    https://www.cnblogs.com/hotbaby/p/4913363.htmlPython 运算符重载构造函数与表达式: __init__, __sub__ 常见运算符重载方法metho ...

  • RealPython 基础教程:Python 运算符和表达式

    " 运算是程序的基本功能,而运算符和表达式则是最基本的运算单元" 在了解了不同类型的变量之后,我们现在该用这些变量做点什么了. 今天,我们将了解如何在变量上执行计算.你最终将会掌握 ...