Python 比较运算符从左到右链接/分组是什么意思?
- 2025-02-20 09:23:00
- admin 原创
- 25
问题描述:
Python 文档中关于运算符优先级的描述如下:
同一框中的运算符按从左到右的方式分组(除了比较,包括测试,它们都具有相同的优先级并从左到右链接 - 请参阅比较... 部分)
这意味着什么?具体来说:
“同一个框中的运算符按从左到右分组(比较除外……)” - 比较不是按从左到右分组吗?
如果比较不是从左到右分组,它们会做什么呢?它们是“链接”而不是“分组”吗?
如果比较“链”而不是“组”,那么“链接”和“分组”之间有什么区别?
有哪些例子可以证明比较运算符是从左到右链接的,而不是从右到左链接的?
解决方案 1:
分组(这是非比较运算符所做的):
a + b + c means (a + b) + c
链接(这是比较运算符所做的):
a < b < c means (a < b) and (b < c)
从左到右分组(这是事物的分组方式):
5 - 2 - 1 means (5 - 2) - 1 == 2
而不是从右到左分组(这会产生不同的结果):
5 - (2 - 1) == 4
从左到右链接
链接是从左到右的,因此在中a < b < c
,表达式a < b
在之前被评估b < c
,并且如果a < b
为假,b < c
则不被评估。
(2 < 1 < f())
`False无需调用函数就给出值
f,因为
2 < 1`计算结果为假,所以不需要执行第二次比较。
f() > 1 > g()
调用f()
来评估第一个比较,并且根据结果,它可能需要或不需要评估第二个条件,这需要调用g()
。
注意:每个操作数最多被求值一次。因此在表达式中1 < f() < 2
,该函数f()
仅被调用一次,并且它给出的值在两次比较中都会使用(如果需要)。
https://en.wikipedia.org/wiki/Short- Circuit_evaluation
解决方案 2:
事实上,连锁行为并没有那么明显。
a == b == c
尽管人们希望将其转换为
a == b and b == c
它实际上被转换成了类似于
b == c if a == b else False
如果有人试图覆盖比较运算符的行为并将它们链接起来,这会有点令人困惑。
相关推荐
热门文章
项目管理软件有哪些?
- 2025年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
热门标签
云禅道AD