最新在
CSDN
中回答了用户一个问题,也被采纳了。在此过程中也学习到了Python
连续比较运算符,感觉Python
的连续比较运算符可读性很一般,写代码的时候很容易就理解错。
- ①连续比较运算符简介: 在
Python
中,比较运用符<、>、<=、>=、== 、!=
可以连用,但语法规则和其它编程语言不一样。- ②连续比较运算符案例: 以
==
为例,具体语法规则是:a == b == c == d
等价于a == b and b == c and c == d
。
\qquad CSDN问答用户提出的问题链接:https://ask.csdn.net/questions/7887166
截图如下:
\qquad CSDN问答用户给出了自己的运行结果,5+2>3==2**0
结果为False
,(5+2>3)==2**0
结果为True
,用户感觉无法理解,结果非常奇怪。我当时看到结果的时候第一反应也是觉得是不是哪里搞错了。具体情况如下截图:
上图中,两个表达式按运算符优先级进行运算,按
True==1
和False==0
,结果应该都是True
吧,可是这里怎么会不同呢?有人给咱解解惑吗?谢谢。
\qquad 首先我们先把两个不同结果的表达式列出来,方便一步一步求解问题,了解Python解析器解析表达式的运作过程。同时也需要复习一下Python的运算符相关知识Python运算符及用法(超级详细)
5+2>3==2**0
(5+2>3)==2**0
\qquad 由于**
的优先级比==
高所以以上两个表达式可以等价为:
5+2>3==1
(5+2>3)==1
\qquad 对于第一个表达式,+
号优先级最高,同理表达式2括号中的表达式也是+
号优先级较高,所以又可以等价为:
7>3==1
(7>3)==1
\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
要搞个这样的语法,是不是就是为了程序员一时的方便,写代码更快更简短,但这极大的影响了程序的可读性,同时不便于程序的维护和更新。