为什么Python中0 or 3返回3,3 and 0返回0?
Python 逻辑运算符
or/and返回规则 Python 中的or、and运算符采用短路求值逻辑,且最终返回的是第一个能决定整个表达式结果的原始运算对象,而非单纯的True/False布尔值。
or 运算规则
- 从左到右依次判断每个运算对象的布尔真值
- 遇到第一个布尔值为
True的对象时,直接返回该对象,不再计算后续的运算对象 - 如果所有运算对象的布尔值都为
False,返回最后一个对象
你给出的测试代码运行结果解释如下:
print(3 or 0) # 3的布尔值为True,直接返回3 print(0 or 3) # 0的布尔值为False,继续判断下一个,3为True,返回3 print(3 or 10) # 3的布尔值为True,直接返回3 print(10 or 3) # 10的布尔值为True,直接返回10
and 运算规则
- 从左到右依次判断每个运算对象的布尔真值
- 遇到第一个布尔值为
False的对象时,直接返回该对象,不再计算后续的运算对象 - 如果所有运算对象的布尔值都为
True,返回最后一个对象
你提到的3 and 0返回0的解释:
print(3 and 0) # 3的布尔值为True,继续判断下一个,0为False,返回0 print(0 and 3) # 0的布尔值为False,直接返回0 print(3 and 10) # 所有对象都为True,返回最后一个10
常见布尔值为False的对象参考
- 数值类:
0、0.0、None - 空序列:
''(空字符串)、[](空列表)、()(空元组) - 空映射:
{}(空字典) - 自定义对象中定义
__bool__/__len__方法返回False/0的实例
内容的提问来源于stack exchange,提问作者Vishakha Sharma
相关产品推荐
相关产品推荐

