Python连续比较运算符的可读性问题


最新在
CSDN中回答了用户一个问题,也被采纳了。在此过程中也学习到了Python连续比较运算符,感觉Python的连续比较运算符可读性很一般,写代码的时候很容易就理解错。
Python连续比较运算符的可读性问题
- 前言
- 一、CSDN问答用户关于Python表达式的疑问
- 二、问题分析过程
-
- (一)把两个不同结果的表达式列出来
- (二)对两个表达式进行简化
- (三)在PyCharm开发环境中进行测试
- (四)查阅资料得出结论
- 三、总结
前言
- ①连续比较运算符简介: 在
Python中,比较运用符<、>、<=、>=、== 、!=可以连用,但语法规则和其它编程语言不一样。- ②连续比较运算符案例: 以
==为例,具体语法规则是:a == b == c == d等价于a == b and b == c and c == d。
一、CSDN问答用户关于Python表达式的疑问
\\qquadCSDN问答用户提出的问题链接:👉https://ask.csdn.net/questions/7887166
截图如下:

\\qquadCSDN问答用户给出了自己的运行结果,5+2>3==20结果为False,(5+2>3)==20结果为True,用户感觉无法理解,结果非常奇怪。我当时看到结果的时候第一反应也是觉得是不是哪里搞错了。具体情况如下截图:

上图中,两个表达式按运算符优先级进行运算,按
True==1和False==0,结果应该都是True吧,可是这里怎么会不同呢?有人给咱解解惑吗?谢谢。
二、问题分析过程
(一)把两个不同结果的表达式列出来
\\qquad首先我们先把两个不同结果的表达式列出来,方便一步一步求解问题,了解Python解析器解析表达式的运作过程。同时也需要复习一下Python的运算符相关知识👉Python运算符及用法(超级详细)
5+2>3==20
(5+2>3)==20
(二)对两个表达式进行简化
\\qquad由于的优先级比==高所以以上两个表达式可以等价为:
5+2>3==1
(5+2>3)==1
\\qquad对于第一个表达式,+号优先级最高,同理表达式2括号中的表达式也是+号优先级较高,所以又可以等价为:
7>3==1
(7>3)==1
(三)在PyCharm开发环境中进行测试
\\qquad到这里,我们使用PyCharm运行上面的表达式,结果如下:

\\qquad所以该问题就变成,7>3==1和(7>3)==1表达式计算的结果为什么不是都是True。
(四)查阅资料得出结论
\\qquad经过查阅资料,发现Python支持连续的比较运算符:a > b == c,但它其实是 a > b and b == c 的简略写法,而不是表示先进行计算 a > b ,然后用结果判断是否等于c,也不是判断a是否大于 b == c 的结果。
\\qquad所以7>3==1应为7>3 and 3==1 为False。
\\qquad连续比较运算符参考阅读:👉python语法糖之连续比较表达式
三、总结
\\qquad通过问题的解答,自己又学会了一个Python的知识点,原来运算符还可以连续运算。但在使用的时候要非常注意,因为它和我们看代码的习惯很不一样,很容易就理解错了或者导致代码出现意向不到的结果。
\\qquad反过来想一想,为什么Python要搞个这样的语法,是不是就是为了程序员一时的方便,写代码更快更简短,但这极大的影响了程序的可读性,同时不便于程序的维护和更新。


