Python运算符优先级详细整理

作者:十年的码爷 时间:2021-12-17 06:38:14 

前言

虽然本文讲的是Python,但其实它也适用于所有的编程语言。因为这里面蕴含着编程之魂。所以本文标题没有显著的使用Python关键词。当然以前的文章用了Python关键词是因为当时我并没有想到这一点,很多内容也适用所有编程语言。

本文是运算符相关教程的最后一篇,将介绍运算符的最后一个汇总性的概念——运算符的优先级。

优先级概述

所谓优先级,是指优先计算的顺序。比如小学中我们学过的加减乘除基本四则运算,乘除要先于加减计算,因为乘除的优先级比加减要高。小括号拥有最高优先级,如果想先计算加减,可用小括号将其包围起来,在Python中也是如此,很显然,计算顺序不同,其结果也是不同的:

Python运算符优先级详细整理

相同优先级

有些运算是互逆的,交换它们的位置不影响运算结果,所以区分它们的优先级是没有必要的,比如加和减(包括正号和负号)、乘和除、左移和右移、is与is not、in与not in。这些运算符都具有相同的优先级。

当然,有些运算符交换位置会影响结果,但它们本身只是表示同一种算法的不同结果,难以区分不同的优先级。比如比较运算符中的等于、大于、小于、不等于、大于等于、小于等于都具有相同的优先级。

需要特别注意的是,虽然Python支持诸如下例所示的连续的比较运算符:

a > b == c

但它其实是 a > b and b == c 的简略写法,而不是表示先进行计算 a > b ,然后用结果判断是否等于c,也不是判断a是否大于 b == c 的结果,下面的示例可以证明这点,无论哪个运算符先计算,其结果都与原始表达式结果不同,只有转换成两个表达式才一样(注:False等价于0,True等价于1):

Python运算符优先级详细整理

这一点,对于<等其他比较运算符,规则也是如此。

当然,大多数运算符的优先级是不同的。

结合性

与运算符优先级相关的另一个重要概念是结合性,它决定了同一种运算符是从左往右计算,还是从右往左。下面是一个优秀的著名例子:

Python运算符优先级详细整理

 它证明乘方运算的结合性是从右往左。

大多数运算符都是从左往右开始计算的,简称左结合性。只有少部分运算符具有右结合性。下面是右结合性运算符列表:

按位取反(位非)、正负号、位与、逻辑非、赋值系列运算符

运算符优先级一览表

Python运算符优先级详细整理

其中上一行比下一行的优先级高,同一行表示优先级相同。在同一个表达式中,按照优先级从高到低依次计算,优先级相同则按照从左到右的顺序计算。同一类型的运算符则按结合性计算。

注:其中@为矩阵乘法运算符,大多数资料中都没有记录此运算符。官方文档记录:&ldquo;The @ (at) operator is intended to be used for matrix multiplication. No builtin Python types implement this operator.&rdquo;(@(at)运算符打算用于矩阵乘法。没有任何内置的Python类型可以实现此操作符。)

赋值系列运算符的优先级最低,比or还要低:

Python运算符优先级详细整理

另外赋值运算符支持连续的赋值,这和比较运算符类似,但其实也是相当于两个分开的赋值,与优先级无关:

Python运算符优先级详细整理

本表参考于Python3.7.3官方文档:

Python运算符优先级详细整理

Python3.10.4官方文档也一样,但是没有前者友好,顺序是相反的:

Python运算符优先级详细整理

 运算符优先级重点说明

运算符优先级的概念并不需要去刻意地记忆,如果对某个运算符的优先级不太确定,可以使用小括号将其包围起来。

当然,记住一些重要的优先级概念,有助于对程序的阅读理解与编写维护。下面是一些重要的优先级:

小括号具有最高优先级。

运算符优先级按类别排序:算术 > 位 > 身份 >成员 > 比较 > 逻辑 > 赋值。 算术最高,赋值被低。位非运算符是个另外,它高于乘除。

身份、成员、比较、赋值运算符,同类中优先级相同。

算术运算符中:乘方最高,乘除整除取余次之,加减最低。

位运算符中:位非 > 左右移 > 位与 > 位异或 > 位或

逻辑运算符中:非最高,与次之,或最低。

另外,我没有听说过任何编程语言有降低运算优先级&mdash;&mdash;与小括号功能正好相反的运算符。这应该是没有必要的,因为根据相对性原理,给一个运算符最高优先级,就相当于给其他运算符最低优先级了,所以,如果想给一个运算符最低的优先级,可以将其余的运算符全部用小括号包围起来。

最后,除了可以用于提高运算符的优先级之外,在Python中,小括号还有另外一个重要的功能&mdash;&mdash;做为元组的定界符。

身为Python特有的四大基本数据类型之一,元组(tuple)已经在本教程中出现过很多次了,在以后还会出现更多次,所以,下一篇将正式介绍元组。敬请关注。

来源:https://blog.csdn.net/gongxiaxx/article/details/125236226

标签:python,运算符,优先级
0
投稿

猜你喜欢

  • 对Python 窗体(tkinter)树状数据(Treeview)详解

    2022-12-04 12:58:49
  • JavaScript学习心得之如何走出初学困境

    2008-12-24 13:30:00
  • 在notepad++中实现直接运行python代码

    2022-08-19 09:52:00
  • 利用Python 制作二维码

    2022-07-28 01:07:13
  • Python通过format函数格式化显示值

    2021-11-06 06:13:01
  • Vue+Django项目部署详解

    2024-04-30 10:20:16
  • Python中移除List重复项的五种方法

    2021-12-11 20:15:38
  • python opencv旋转图像(保持图像不被裁减)

    2022-02-09 13:56:32
  • mysql5.7.20第一次登录失败的快速解决方法

    2024-01-19 16:57:36
  • 关于Python正则表达式模块之re模块

    2022-12-31 08:03:46
  • Python使用turtle库绘制小猪佩奇(实例代码)

    2021-09-21 08:45:30
  • SQL Server 2008 数据库镜像部署实例之一 数据库准备

    2024-01-23 14:21:48
  • 全屏flash的尺寸分析

    2009-02-11 13:22:00
  • Python3 集合set入门基础

    2021-04-25 10:20:46
  • 用python做一个搜索引擎(Pylucene)的实例代码

    2023-06-30 22:12:40
  • Python中选择结构实例讲解

    2023-06-26 14:56:09
  • 什么是python的必选参数

    2022-12-04 07:28:36
  • python深度学习tensorflow安装调试教程

    2021-06-28 23:03:51
  • JS+php后台实现文件上传功能详解

    2024-04-27 15:22:28
  • 在Laravel 中实现是否关注的示例

    2023-11-14 15:22:57
  • asp之家 网络编程 m.aspxhome.com