马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
关于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 [Program finished]
所以呀,妈妈经常说,糖吃多了不好哟~~~
语法糖固然方便,但是使用前最好知道其原理,不然真的“甜的掉牙”呢。。。
|