Python单行组合多比较、逻辑运算符时x的赋值结果问题
Python逻辑表达式求值结果解析
先记住两个必用的求值规则,这类题目不会出错:
- 优先级顺序:比较运算符(
</>/==等)>and>or,优先级高的运算先执行 - 逻辑运算自带短路机制:只要当前计算到的部分已经能确定整个表达式的结果,就直接返回当前值,不会再计算后面的内容。其中
a or b会在a为真值时直接返回a,a and b会在a为假值时直接返回a。
题目给出的代码段:
z = 2 y = 1 x = y < z or z > y and y > z or z < y
分步计算
- 先算所有比较运算(优先级最高):
y < z即1<2,结果为Truez > y即2>1,结果为Truey > z即1>2,结果为Falsez < y即2<1,结果为False
- 再算优先级更高的
and部分:也就是z > y and y > z,代入结果等价于True and False,返回False - 原表达式简化为
True or False or False,从左到右算or时第一个值就是True,直接触发短路返回True,后面的表达式不会执行。
误区说明
你提到的「若y小于z则x等于y」是错误理解:逻辑运算符连接的是独立的表达式,不会把比较符前的变量值直接赋给目标变量。只有当参与逻辑运算的操作数本身是非布尔类型的真值/假值时,逻辑运算符才会返回对应操作数的原值,本题所有比较结果都是布尔值,因此x最终被赋值为True。
内容的提问来源于stack exchange,提问作者Jeremy Kievit
相关产品推荐
相关产品推荐

