Python布尔逻辑疑问:为何bool([]) == False成立而[] == False不成立?
问题解答
这是因为Python里的**布尔判定(判断一个值是“真”还是“假”)和相等性比较(判断两个值是否完全相等)**是完全不同的逻辑:
关于
bool([])返回False
空列表[]属于Python定义的“假值”范畴——空序列(空列表、空字符串、空元组)、数字0、None等,当用bool()函数转换时,都会返回False。这是Python对“假值”的判定规则,只要是这类值,在布尔上下文(比如if语句)里都会被视为假。关于
[] == False返回False
Python的相等比较==是严格的,它会先检查两个对象的类型是否匹配。[]是列表类型,False是布尔类型(虽然布尔是整数的子类,False等价于0),但列表和布尔属于不同的对象类型,Python不会自动跨类型转换来判断相等,因此直接返回False。
举个对比例子:0 == False会返回True,因为0和False都属于数值相关类型(bool是int的子类),所以会做值的比较;但[]和False类型不匹配,所以不相等。
如果要判断一个值是不是假值,正确的做法是用bool(x)或者直接在布尔上下文里使用(比如if not []:),而不是用x == False来比较——后者是在判断两个值是否完全相等,不是判断它的布尔属性。
内容的提问来源于stack exchange,提问作者Seffih Oualid Redouan
相关产品推荐
相关产品推荐

