_BinmdosNow 发表于 2019-8-9 04:50:24

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("结果:", a<b<c<d>b)

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                                                

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

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

_BinmdosNow 发表于 2019-8-9 04:52:44

本帖最后由 _BinmdosNow 于 2019-8-9 04:55 编辑

噗哈哈哈,这个结果在代码风格框中好丑。。。

这个帖子中的内容我刚刚也在runoob中关于python运算符那一章的下面的笔记部分留下了笔记,如果大伙看到了,那也是俺的。

zltzlt 发表于 2019-8-9 07:57:32

楼主好辛苦,4 点了还在为我们写帖子

Loafer0 发表于 2022-11-22 10:21:52

{:10_281:}{:10_281:}{:10_281:}
页: [1]
查看完整版本: python中甜的掉牙的语法糖 之 连续比较表达式