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

在这里插入图片描述

最新在CSDN中回答了用户一个问题,也被采纳了。在此过程中也学习到了Python连续比较运算符,感觉Python的连续比较运算符可读性很一般,写代码的时候很容易就理解错。


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

  • 前言
  • 一、CSDN问答用户关于Python表达式的疑问
  • 二、问题分析过程
    • (一)把两个不同结果的表达式列出来
    • (二)对两个表达式进行简化
    • (三)在PyCharm开发环境中进行测试
    • (四)查阅资料得出结论
  • 三、总结


前言

  • ①连续比较运算符简介: Python中,比较运用符<、>、<=、>=、== 、!=可以连用,但语法规则和其它编程语言不一样。
  • ②连续比较运算符案例: == 为例,具体语法规则是:a == b == c == d 等价于 a == b and b == c and c == d

一、CSDN问答用户关于Python表达式的疑问

\qquad CSDN问答用户提出的问题链接:https://ask.csdn.net/questions/7887166
截图如下:

Python连续比较运算符的可读性问题_第1张图片
\qquad CSDN问答用户给出了自己的运行结果,5+2>3==2**0结果为False(5+2>3)==2**0结果为True,用户感觉无法理解,结果非常奇怪。我当时看到结果的时候第一反应也是觉得是不是哪里搞错了。具体情况如下截图:

Python连续比较运算符的可读性问题_第2张图片

上图中,两个表达式按运算符优先级进行运算,按True==1False==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

(三)在PyCharm开发环境中进行测试

\qquad 到这里,我们使用PyCharm运行上面的表达式,结果如下:

Python连续比较运算符的可读性问题_第3张图片

\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==1False

\qquad 连续比较运算符参考阅读:python语法糖之连续比较表达式


三、总结

\qquad 通过问题的解答,自己又学会了一个Python的知识点,原来运算符还可以连续运算。但在使用的时候要非常注意,因为它和我们看代码的习惯很不一样,很容易就理解错了或者导致代码出现意向不到的结果。

\qquad 反过来想一想,为什么Python要搞个这样的语法,是不是就是为了程序员一时的方便,写代码更快更简短,但这极大的影响了程序的可读性,同时不便于程序的维护和更新。


你可能感兴趣的:(Python,连续比较运算符,python,语法,运算符,问答)