python运算符的优先级原来是这样的

这算是一篇《避坑文章》

为什么叫避坑呢,起因是自己掉过很多人挖的坑,比如国内转来转去的东西,大多是你抄我我抄你,从最起头就有问题,抄下去问题或许更多;有些又是因为翻译的问题,或是因为翻译造成的理解问题;有些是细节问题,一点点不起眼的地方,就引起最终的错误;有些是版本更新的问题。

所以想来想去,有时间的时候就写写,希望有人能看到,避免走一些弯路,我的目的就达到了。

(自己挖的坑暂时就不提了。。。)

最近想折腾一下python,就从头开始看了看,因为这样一道问题:

if not 1 + 1 == y or x == 4 and 7 == 8:

当然涉及到了pythone运算符的优先级,有点不清楚python的运算优先级,就去查了一下。

结果发现,好几个地方的内容是这样的,我粘了一份过来(从高到低):

运算符 描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 'AND'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符


实际上,官方是这样的(从低到高):

Operator Description
lambda Lambda expression
if – else Conditional expression
or Boolean OR
and Boolean AND
not x Boolean NOT
innot inisis not<<=>>=!=== Comparisons, including membership tests and identity tests
| Bitwise OR
^ Bitwise XOR
& Bitwise AND
<<>> Shifts
+- Addition and subtraction
*@///% Multiplication, matrix multiplication, division, floor division, remainder [5]
+x-x~x Positive, negative, bitwise NOT
** Exponentiation [6]
await x Await expression
x[index]x[index:index]x(arguments...)x.attribute Subscription, slicing, call, attribute reference
(expressions...)[expressions...]{key: value...},{expressions...} Binding or tuple display, list display, dictionary display, set display

来源:

https://docs.python.org/3/reference/expressions.html#operator-precedence


各位看官发现区别没有?

我第一时间发现的问题就是,与或非这3个运算,前面那个表格在列在同一等级,这明显与常理不符,所以我才去查了官方资料。

相关推荐:

mysql索引原理及使用

MySQL索引是一种使用B树数据结构组织数据的结构,通过绕过行扫描直接定位所需数据,提高检索速度。索引适用于数据量大且经常按条件查询的情况。MySQL支持多种索引类型,包括B-Tree、哈希、全文和空间索引,可根据查询模式合理选择。索引的优点包括提高查询速度、减少服务器开销和改善查询计划,但要注意其存储空间占用和维护开销,避免过度索引。 MySQL 索引原理 索引是 MySQL 中一种重要的数据结...

怎么使用云mysq!

如何使用云 MySQL云 MySQL 是一种托管式数据库服务,可让您轻松使用 MySQL 数据库,而无需管理基础设施。步骤如下:创建 GCP 账户。启用 Cloud SQL API。创建 Cloud MySQL 实例,指定数据库类型、实例大小、磁盘大小、区域和实例名称。 如何使用云 MySQL 概述 云 MySQL 是一种托管式数据库服务,可让您轻松地部署、管理和扩展 MySQL 实例,而无需管理...

ntml+css+js如何搭配使用

HTML、CSS 和 JS 结合使用可创建动态网页,其中 HTML 定义结构、CSS 控制视觉表现,而 JS 添加交互性。这带来了灵活性、增强的用户体验、响应式设计和 SEO 优势。 HTML、CSS 和 JS 的搭配使用指南 HTML (超文本标记语言) 是网页内容的骨架,它用于定义网页的结构和内容。 CSS (层叠样式表) 用于控制网页的视觉表现,例如字体、颜色、布局和动画。 JavaScri...

php mysql使用

PHP 连接 MySQL 数据库时需:1. 安装 MySQL PHP 扩展;2. 创建与服务器的连接;3. 选择要连接的数据库;4. 执行 SQL 查询;5. 处理查询结果;6. 关闭连接。 PHP 连接 MySQL 数据库 如何连接 MySQL 数据库? 使用 PHP 连接 MySQL 数据库的步骤如下: 安装 MySQL PHP 扩展:在 PHP 服务器上安装 MySQL PHP 扩展。 创建...

css线性渐变使用场景

CSS线性渐变用途广泛,应用场景包括:创建渐变背景突出元素营造氛围和主题为按钮和图标增添视觉吸引力显示进度或状态为文本创建视觉层次和情感表达为元素增添渐变边框吸引注意力营造阴影、光泽和三维效果作为动画过渡效果的背景 CSS线性渐变的使用场景 CSS线性渐变是一种在两个或多个颜色之间创建平滑过渡效果的技术。它在各种网站和应用程序设计中广泛应用,为设计增添视觉吸引力。 以下是CSS线性渐变的一些常见使...

hive 使用上与mysql区别

Hive 和 MySQL 的主要区别在于:数据存储:Hive 存储数据在 HDFS 中,而 MySQL 存储在表中。数据模型:Hive 支持扁平模型,MySQL 支持关系模型。数据处理:Hive 用于批处理,MySQL 用于交互查询。并发性:MySQL 支持并发,而 Hive 不支持。可扩展性:Hive 具有高可扩展性,而 MySQL 的可扩展性有限。 Hive 与 MySQL 的主要区别 Hiv...

css按钮使用

如何使用 CSS 创建按钮?创建按钮元素:使用 button 标签创建按钮。应用样式:使用 style 属性或外部样式表为按钮设置样式。添加功能:通过 onclick 事件处理程序添加单击响应。 CSS 按钮使用指南 如何使用 CSS 创建按钮? 在 CSS 中,可以使用 button 元素来创建按钮。可以通过 CSS 来设置按钮的样式和功能。 步骤: 创建按钮元素:使用 button 标签在 H...

isp使用css外连接找不到css

CSS 外部链接找不到 CSS 文件,导致页面显示错误。解决方法包括:检查 URL 路径、确认文件存在、检查文件权限、验证 MIME 类型、检查防火墙设置、检查浏览器缓存、使用绝对路径、使用 HTML 5 标签,最后可联系 ISP 检查网络配置错误。 ISP 使用 CSS 外部链接找不到 CSS 问题:ISP 使用 CSS 外部链接时找不到 CSS 文件,导致页面显示错误。 解决方案: SeoSh...