鱼C论坛

 找回密码
 立即注册
查看: 3699|回复: 3

[技术交流] python中甜的掉牙的语法糖 之 连续比较表达式

[复制链接]
发表于 2019-8-9 04:50:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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]

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

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

评分

参与人数 1荣誉 +3 鱼币 +3 收起 理由
冬雪雪冬 + 3 + 3 鱼C有你更精彩^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2019-8-9 04:52:44 | 显示全部楼层
本帖最后由 _BinmdosNow 于 2019-8-9 04:55 编辑

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

这个帖子中的内容我刚刚也在runoob中关于python运算符那一章的下面的笔记部分留下了笔记,如果大伙看到了,那也是俺的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-8-9 07:57:32 | 显示全部楼层
楼主好辛苦,4 点了还在为我们写帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-11-22 10:21:52 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 13:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表