为何(False and False or True)结果为True?逻辑运算符优先级疑问
逻辑运算符优先级与短路求值解惑
你困惑的核心是没搞清楚and运算符的优先级高于or,加上逻辑运算的短路特性,才会出现和预期不一样的结果。
先看第一个表达式:False and False or True
按照优先级规则,会先计算and连接的部分:
False and False结果为False- 表达式简化为
False or True,而or运算只要有一个操作数为True就返回True,所以最终结果是True
再看你的示例代码:print(3>2 and 2>3 and 7>5 or 1>0)
同样遵循优先级,先处理所有and运算(从左到右顺序):
- 先计算
3>2 and 2>3:3>2是True,2>3是False,and运算遇到False就触发短路,直接返回False,后面的7>5不会再计算 - 接着算
False and 7>5:依然返回False - 最后处理
or运算:False or 1>0,1>0是True,所以整个表达式结果为True
补充两个关键规则
- 优先级:
and的优先级高于or,表达式中会先完成所有and连接的运算,再处理or部分 - 短路求值:
and:从左到右计算,只要遇到一个False,直接返回False,后续表达式不再执行or:从左到右计算,只要遇到一个True,直接返回True,后续表达式不再执行
如果想改变运算顺序,比如让or左边的所有and作为一个整体,可以加括号,比如False and (False or True),结果就会是False——先算括号里的False or True得到True,再算False and True返回False。
内容的提问来源于stack exchange,提问作者Qns
相关产品推荐
相关产品推荐

