首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python比较操作符从左到右是什么意思?

Python比较操作符从左到右是什么意思?
EN

Stack Overflow用户
提问于 2014-09-09 20:59:03
回答 2查看 6.3K关注 0票数 19

用于运算符优先的Python文档声明:

相同框组中的运算符从左到右(除了比较,包括测试,它们都有相同的优先级和从左到右的链-参见比较节.)

这是什么意思?具体地说:

  1. “同一框组中的运算符从左到右(除了比较.)”
  2. 如果比较没有从左到右分组,那么它们会做什么呢?他们是否“连锁”而不是“集团”?
  3. 如果比较“链”而不是“组”,那么“链”和“分组”有什么区别?
  4. 有什么例子可以证明比较运算符从左到右而不是从右到左呢?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-09 21:02:23

分组(这是非比较运算符所做的):

代码语言:javascript
运行
复制
a + b + c   means   (a + b) + c

链接(这是比较运算符所做的):

代码语言:javascript
运行
复制
a < b < c   means   (a < b) and (b < c)

从左到右分组(这是分组的方式):

代码语言:javascript
运行
复制
5 - 2 - 1   means   (5 - 2) - 1 == 2

相对于从右向左分组(这将产生不同的结果):

代码语言:javascript
运行
复制
5 - (2 - 1) == 4

将左向右链接

链接从左到右,因此在a < b < c中,表达式a < b是在b < c之前计算的,如果a < b是falsey,则不计算b < c

(2 < 1 < f())在不调用函数f的情况下给出值False,因为2 < 1的计算结果为false,因此不需要执行第二个比较。

f() > 1 > g()调用f()来计算第一个比较,根据结果,它可能需要也可能不需要计算第二个条件,这需要调用g()

注意:每个操作数最多计算一次。因此,在表达式1 < f() < 2中,函数f()只被调用一次,它给出的值用于两种比较(如果必要的话)。

评估

票数 43
EN

Stack Overflow用户

发布于 2020-07-23 03:02:25

事实上,链的行为并不是那么明显。

代码语言:javascript
运行
复制
a == b == c

虽然人们会认为这会被转换成

代码语言:javascript
运行
复制
a == b and b == c

实际上,它被转换成了类似于

代码语言:javascript
运行
复制
b == c if a == b else False

如果试图覆盖比较运算符的行为并将它们链接起来,这就有点令人困惑了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25753474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档