我刚找到这个:
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"
产生:
False
False
False
False
False
False
hello
所以 a 既不是,也不等于 True 或 False,但在 if 语句中充当 True。
为什么?
更新:
实际上,我刚刚意识到这并不像我想象的那么晦涩。对于 a=2,我也得到了相同的结果(尽管对于 a=0 或 a=1,它们分别被认为等于 False 和 True,但不是)
最佳答案
我发现这里几乎所有的解释都没有帮助,所以再试一次:
这里的混淆是基于用“is”、“==”和“if”进行的测试是三种不同的东西。
- "is"测试身份,即是否是同一个对象。在这种情况下显然不是这样。
- “==”测试值相等性,显然唯一具有 True 和 False 值的内置对象是 True 和 False 对象(任何数字类型的数字 0 和 1 除外)。<
重要的部分来了:
- 'if' 测试 boolean 值。这意味着无论你给它什么表达式,它都会被转换为 True 或 False。你可以用 bool() 做同样的事情。 bool((None,)) 将返回 True。文档中列出了将评估为 False 的内容(此处由其他人链接)
现在也许这在我脑海中更加清晰,但至少我尝试过。 :)
关于既非真亦非假的 Python 事物,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1584733/