python 连续比较_python语法糖之连续比较表达式

关于python的连续比较的语法糖

比如有如下形式:

(a < b) and (b < c),这样子看起来不够好看。

python中提供了连续比较的语法糖:

a < b < c

再举一个栗子:

a < b > c != d >= e <= f != g

这个表达式会被python解释成:

(a < b) and (b > c) and (c != d) and (d >= e) and (e <= f) and (f != g)

再附上一个网友问的一个问题:

为什么表达式 -3 < -2 < -1 > -2 的结果为 True

这是python中的语法糖中的连续比较,不是数学上的表达式;这个表达式会被python解释成:

(-3 < -2) and (-2 < -1) and (-1 > -2)

所以 True and True and True 的结果为 True

很有意思吧,对此我再写一个类,用来观察这个过程。

class myint(int):

def __lt__(self, r): #小于号比较魔法方法

print(self, "<", r) #输出比较过程

return super().__lt__(r)

def __gt__(self, r):#大于号比较魔法方法

print(self, ">", r) #输出比较过程

return super().__gt__(r)

a = myint(-3)

b = myint(-2)

c = myint(-1)

d = myint(0)

print("python内建int对象比较过程:")

print("-3<-2<-1<0>-2")

print("连续比较结果:", -3<-2<-1<0>-2)

print("拆分比较结果:", (-3<-2) and (-2<-1) and (-1<0) and (0>-2))

print("myint, 观察具体过程:")

print("连续比较:")

print("结果:", ab)

print("拆分比较:")

print("结果:", (a < b) and (b < c) and (c < d) and (d > b))

复制代码

上面的代码在python 3.x上面执行没问题,得到了正确的结果。

代码在手机上编辑运行,在帖子编辑器上没找到上传本地图片的地方,我直接贴结果啦

python内建int对象比较过程:

-3<-2<-1<0>-2 连续比较结果: True 拆分比较结果: True myint, 观察具体过程: 连续比较: -3 < -2 -2 < -1 -1 < 0 0 > -2 结果: True 拆分比较: -3 < -2 -2 < -1 -1 < 0 0 > -2 结果: True [Program finished]

复制代码

所以呀,妈妈经常说,糖吃多了不好哟~~~

语法糖固然方便,但是使用前最好知道其原理,不然真的“甜的掉牙”呢。。。

标签: Python 语法糖

顶一下

(0)

0%

踩一下

(0)

0%

你可能感兴趣的:(python,连续比较)