Python编程之魂之运算符的优先级教程

文章目录

    • 前言
    • 优先级概述
    • 相同优先级
    • 结合性
    • 运算符优先级一览表
    • 运算符优先级重点说明
    • 结语
      • 关于Python技术储备
        • 一、Python所有方向的学习路线
        • 二、Python基础学习视频
        • 三、精品Python学习书籍
        • 四、Python工具包+项目源码合集
        • ①Python工具包
        • ②Python实战案例
        • ③Python小游戏源码
        • 五、面试资料
        • 六、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):

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

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

结合性

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

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

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

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

运算符优先级一览表

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

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

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

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

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

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

运算符优先级重点说明

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

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

小括号具有最高优先级。

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

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

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

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

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

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

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

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

结语

在这里插入图片描述

通过本文的编写,我意识到自己对Python的认知还有很大的局限——我刚刚才得知Python中有@矩阵乘法运算符!

虽然我接触Python也有五六年了,使用Python编写的大大小小的程序工程也有近百个,但是如果不是今天对网上运算符优先级资料正确性的质疑,没有查看官方文档的话,不知道还要多少年之后才会得知这一点。

我以前无论找到的与运算符相关还是运算符优先级相关的Python资料都没有提到@,这也说明网上绝大部分的资料的正确性也需要证明。比如关于乘方运算符的右结合性,网络上大多资料都错误的记录为左结合性。


关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、Python基础学习视频

② 路线对应学习视频

还有很多适合0基础入门的学习视频,有了这些视频,轻轻松松上手Python~在这里插入图片描述
在这里插入图片描述

③练习题

每节视频课后,都有对应的练习题哦,可以检验学习成果哈哈!
在这里插入图片描述
因篇幅有限,仅展示部分资料

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python工具包+项目源码合集
①Python工具包

学习Python常用的开发软件都在这里了!每个都有详细的安装教程,保证你可以安装成功哦!
在这里插入图片描述

②Python实战案例

光学理论是没用的,要学会跟着一起敲代码,动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。100+实战案例源码等你来拿!
在这里插入图片描述

③Python小游戏源码

如果觉得上面的实战案例有点枯燥,可以试试自己用Python编写小游戏,让你的学习过程中增添一点趣味!
在这里插入图片描述

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

六、Python兼职渠道

而且学会Python以后,还可以在各大兼职平台接单赚钱,各种兼职渠道+兼职注意事项+如何和客户沟通,我都整理成文档了。
在这里插入图片描述
在这里插入图片描述
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以保存图片微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/187763.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows核心编程 进程遍历与文件加密

目录 进程的遍历 CreateToolhelp32Snapshot Process32First Process32Next 文件加密 使用openssl库进行DES加密 进程的遍历 什么是快照&#xff1a;虚拟中的快照&#xff1a; 我们在分析病毒&#xff0c;分析木马的时候&#xff0c;不能在真机分析&#xff0c;在虚拟机中…

NX二次开发UF_CURVE_ask_curve_turn_angle 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_curve_turn_angle Defined in: uf_curve.h int UF_CURVE_ask_curve_turn_angle(tag_t curve, double orientation [ 3 ] , double * angle ) overview 概述 Returns …

希尔伯特变换-matlab仿真

希尔伯特变换&#xff08;hilbert transform&#xff09;简介 在信号处理中我们常见的有傅里叶变换&#xff0c;用来分析频域信息&#xff0c;还有拉普拉斯变换和z变换&#xff0c;用于系统分析系统响应。短时傅里叶分析和小波分析用于时频分析。希尔伯特变换似乎听到的比较少…

unigui同页面内重定向跳转,企业微信内部应用开发获取用户code例子

procedure TMainForm.UniFormCreate(Sender: TObject); varurl: string;code: string; begin //如果没有code值&#xff0c;将进行重定向if UniApplication.Parameters.Values[code] thenbeginurl :https://open.weixin.qq.com/connect/oauth2/authorize?appid你们的企业ID&…

基于springBoot+Vue的停车管理系统

开发环境 IDEA JDK1.8 MySQL8.0Node 系统简介 本项目为前后端分离项目&#xff0c;前端使用vue&#xff0c;后端使用SpringBoot开发&#xff0c;主要的功能有用户管理&#xff0c;停车场管理&#xff0c;充值收费&#xff0c;用户可以注册登录系统&#xff0c;自主充值和预…

中间件渗透测试-Server2131(解析+环境)

B-10&#xff1a;中间件渗透测试 需要环境的加qq 任务环境说明&#xff1a; 服务器场景&#xff1a;Server2131&#xff08;关闭链接&#xff09; 服务器场景操作系统&#xff1a;Linux Flag值格式&#xff1a;Flag&#xff5b;Xxxx123&#xff5d;&#xff0c;括…

中职网安-Linux操作系统渗透测-Server2130(环境加qq)

B-9:Linux操作系统渗透测 任务环境说明:  服务器场景:Server2130  服务器场景操作系统:Linux(关闭链接) 1.通过本地PC中渗透测试平台Kali对靶机场景进行系统服务及版本扫描渗透测试,并将该操作显示结果中Apache服务对应的版本信息字符串作为Flag值提交; 2.…

UML建模图文详解教程08——部署图

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;《UML面向对象分析、建模与设计&#xff08;第2版&#xff09;》吕云翔&#xff0c;赵天宇 著 部署图概述 部署图(deployment diagram)也被译作配置…

详细解答T-SNE程序中from sklearn.manifold import TSNE的数据设置,包括输入数据,绘制颜色的参数设置,代码复制可用!!

文章目录 前言——TSNE是t-Distributed Stochastic Neighbor Embedding的缩写1、可运行的T-SNE程序2. 实验结果3、针对上述程序我们详细分析T-SNE的使用方法3.1 加载数据3.2 TSNE降维3.3 绘制点3.4 关于颜色设置&#xff0c;颜色使用的标签数据的说明cy 总结 前言——TSNE是t-D…

针对String、StringBuffer、Stringbuilder区别及使用场景

可变性&#xff08;Mutability&#xff09;&#xff1a; String&#xff1a; 字符串是不可变的。一旦创建了一个字符串对象&#xff0c;它的值就不能被修改。任何对字符串的操作实际上都是创建了一个新的字符串对象。 StringBuilder&#xff1a; 字符串生成器&#xff0c;是可…

stm32实现0.96oled图片显示,菜单功能

stm32实现0.96oled图片显示&#xff0c;菜单功能 功能展示简介代码介绍oled.coled.holedfont.h&#xff08;字库文件&#xff09;main函数 代码思路讲解 本期内容&#xff0c;我们将学习0.96寸oled的进阶使用&#xff0c;展示图片&#xff0c;实现菜单切换等功能&#xff0c;关…

【送书福利-第二十八期】《从概念到现实:ChatGPT和Midjourney的设计之旅》

&#x1f60e; 作者介绍&#xff1a;我是程序员洲洲&#xff0c;一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公粽号&#xff1a;程序员洲洲。 &#x1f388; 本文专栏&#xff1a;本文…

Flutter开发警告Constructors in ‘@immutable‘ classes should be declared as ‘const‘

文章目录 警告信息报错代码警告原因修改后的代码 警告信息 Flutter开发遇到如下警告 Constructors in ‘immutable’ classes should be declared as ‘const’. 报错代码 class TaskWidget extends StatefulWidget {final String title;final bool isChecked;final int ord…

MFIN 6201 Practice Question

MFIN 6201 Practice Question WeChat: ye1-6688

三菱PLC编码器转速测量功能块(梯形图和ST代码)

编码器转速测量功能块算法公式详细讲解请参考下面文章链接: SMART PLC编码器转速测量功能块(高速计数器配置+梯形图)-CSDN博客文章浏览阅读427次。里工业控制张力控制无处不在,也衍生出很多张力控制专用控制器,磁粉制动器等,本篇博客主要讨论PLC的张力控制相关应用和算法,…

【Netty专题】Netty调优及网络编程中一些问题补充(面向面试学习)

目录 前言阅读对象阅读导航笔记正文一、如何选择序列化框架1.1 基本介绍1.2 在网络编程中如何选择序列化框架1.3 常用Java序列化框架比较 二、Netty调优2.1 CONNECT_TIMEOUT_MILLIS&#xff1a;客户端连接时间2.2 SO_BACKLOG&#xff1a;最大同时连接数2.3 TCP_NODELAY&#xf…

【JavaEE初阶】Thread 类及常见方法、线程的状态

目录 1、Thread 类及常见方法 1.1 Thread 的常见构造方法 1.2 Thread 的几个常见属性 1.3 启动⼀个线程 - start() 1.4 中断⼀个线程 1.5 等待⼀个线程 - join() 1.6 获取当前线程引用 1.7 休眠当前线程 2、线程的状态 2.1 观察线程的所有状态 2.2 线程状态和状…

Jmeter接口自动化测试操作流程

在企业使用jmeter开展实际的接口自动化测试工具&#xff0c;建议按如下操作流程&#xff0c; 可以使整个接口测试过程更规范&#xff0c;更有效。 接口自动化的流程&#xff1a; 1、获取到接口文档&#xff1a;swagger、word、excel ... 2、熟悉接口文档然后设计测试用例&am…

RK3568驱动指南|第八篇 设备树插件-第73章 设备树插件使用实验

瑞芯微RK3568芯片是一款定位中高端的通用型SOC&#xff0c;采用22nm制程工艺&#xff0c;搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码&#xff0c;支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU&#xff0c;可用于轻量级人工…

Mysql 解决Invalid default value for ‘created_at‘

在mysql版本 8.0 和 5.* 之间数据互导的过程中&#xff0c;老是会出现各种错误&#xff0c;比如 这个created_at 一定要有一个默认值&#xff0c; 但是我加了 default null 还是会报错&#xff0c;于是对照了其他的DDL 发现&#xff0c;需要再加 null default null 才行&#…