我刚发现这个:
a = (None,)
print (a is True)
print (a is False)
print (a == True)
print (a == False)
print (a == None)
print (a is None)
if a : print "hello"
if not a : print "goodbye"
Run Code Online (Sandbox Code Playgroud)
产生:
False
False
False
False
False
False
hello
Run Code Online (Sandbox Code Playgroud)
所以既不是,也不等于True或False,但在if语句中表现为True.
为什么?
更新:
实际上,我刚刚意识到这并不像我想象的那么模糊.我得到a = 2的相同结果(虽然不是a = 0或a = 1,它们分别被认为等于False和True)
Len*_*bro 13
我发现这里几乎所有的解释都没有用,所以这是另一个尝试:
这里的混淆是基于"is","=="和"if"三种不同的测试.
这里有重要的部分:
现在也许这只是在我的头脑中更清楚,但至少我试过了.:)
a是一个单元组的元组,其评估结果为True.is因此,测试对象的身份,进入False所有那些测试.==测试对象的相等性,因此,你False再次得到.
在if语句a __bool__(或__nonzero__)用于评估对象,对于非空元组它应该返回True,因此你得到True.希望这能回答你的问题.
编辑:原因True和False等于1和0分别是因为 bool类型实现为类型的子int类.