第一个字符之谜:
bool('foo')
如何返回True
?
如果
'foo' == True
返回False
'foo' == False
返回False
'foo' is True
返回False
'foo' is False
返回False
第二个整数之谜:
bool(5)
如何返回True
?
如果
5 == True
返回False
5 == False
返回False
5 is True
返回False
5 is False
返回False
零的第三个奥秘:
bool(0)
如何返回False
?
如果
0 == True
返回False
0 == False
返回True
< - 特殊情况
0 is True
返回False
0 is False
返回False
我知道Python的一些真实性,然而,这一切似乎有点神秘。有人介意对此有所了解吗?
答案 0 :(得分:2)
你需要阅读:https://docs.python.org/2/library/stdtypes.html#truth-value-testing
'foo' == True # -> False
'' == True # -> False
'' == False # -> False
始终为False
。字符串不等于bool
。但是 - 是的 - bool('non-empty-str') -> True
; bool('') -> False
。
等等你的其他“神秘事件”。
is
比较两个对象的身份id()
(这里也有一些谜团:What's with the Integer Cache inside Python?)
这也可能很有趣:Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language?
答案 1 :(得分:2)
这是因为Python中0
和''
都是False
,而非空字符串和非零整数都是True。
在所有示例中,他们返回原因的原因是==
检查相同的value
而is
检查两者是否指向同一个对象。< / p>
因此,在第一种情况下,foo
为True
,但它们的值不同。同样,foo
未指向与True
相同的值,这就是它返回false的原因。其余的例子继续采用相同的模式。