Python逻辑运算符疑问:为何2 and 4返回4而非True?
为什么
2 and 4返回4而不是True? 这是个非常典型的Python逻辑运算符特性问题,很多刚接触Python的同学都会在这里绕弯子~让我给你掰扯清楚:
首先得明确:Python里的and、or这两个逻辑运算符,并不是直接返回布尔值True/False,而是返回参与运算的实际操作数本身,同时遵循「短路求值」的规则:
- 对于
a and b:- 先判断
a是否为「假值」(比如0、空字符串""、空列表[]这类被Python认定为False的对象) - 如果
a是假值,直接返回a,不会再计算b(短路了) - 如果
a是「真值」(非零数字、非空容器等),就继续计算b,然后返回b
- 先判断
- 对于
a or b则相反:先判断a,是真值就直接返回a,否则返回b
回到你的例子:2 and 4,2是真值,所以程序会继续计算4,最后返回4;如果换成0 and 4,就会直接返回0;如果是2 and 0,则返回0。
而你之前提到的3%2 == 0这类比较运算,它们的结果本身就是布尔类型,所以会返回True/False——这和逻辑运算符的返回规则是两回事哦。
这种设计其实很实用,比如我们经常会写这样的简洁代码:
# 如果输入的用户名为空,就用默认值"Guest" user_name = input("输入用户名:") or "Guest"
要是逻辑运算符只返回布尔值,这种便捷的写法就没法实现啦。
如果确实需要把逻辑运算的结果转换成标准布尔值,直接用bool()包裹就行:
print(bool(2 and 4)) # 输出True
内容的提问来源于stack exchange,提问作者Sigur
相关产品推荐
相关产品推荐

