Python中(1 or 2)与(1 and 2)的含义及逻辑运算符返回值解析
Python中
or和and的短路求值逻辑及正确用法 核心原理:短路求值与返回实际操作数
Python里的or和and并不是单纯返回True或False,而是遵循短路求值规则,直接返回参与运算的实际操作数:
or运算符:从左到右遍历操作数,返回第一个被判定为「真值」的元素;如果所有元素都是「假值」,则返回最后一个假值。
(注:Python中除了0、""、[]、{}、None等少数值为假值,其余大多为真值)and运算符:从左到右遍历操作数,返回第一个被判定为「假值」的元素;如果所有元素都是「真值」,则返回最后一个真值。
测试结果拆解
来看你给出的几个例子:
print(1 or 2):1是真值,直接返回1,所以输出1print(1 and 2):1是真值,继续判断下一个,2也是真值,返回最后一个元素2print(1 or 2 or 3):第一个元素1是真值,直接返回1print(1 and 2 and 3):所有元素都是真值,返回最后一个元素3print(1 or 2 and 3):and优先级高于or,先算2 and 3得3,再算1 or 3,1是真值返回1print(1 and 2 or 3):先算1 and 2得2,再算2 or 3,2是真值返回2
正确简化多值判断的方法
你想简化if i ==1 or i ==2的写法,不要用i == (1 or 2)这种错误方式,正确的简化方法是用in关键字:
for i in range(10): if i in {1, 2}: # 用集合,查找效率更高 print(i)
也可以用列表if i in [1,2],效果一致,集合在元素数量较多时性能更优。
为什么i == (1 or 2)不对
1 or 2会直接返回1,所以你的代码等价于if i ==1,自然只会输出1;同理(2 or 1)返回2,代码就等价于if i ==2,只会输出2。
内容的提问来源于stack exchange,提问作者Clay Hsu
相关产品推荐
相关产品推荐

