Booleans,Equivalencies和Object Identifiers的神秘案例

时间:2015-09-05 10:54:11

标签: python boolean logic python-3.4 truthiness

第一个字符之谜:
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的一些真实性,然而,这一切似乎有点神秘。有人介意对此有所了解吗?

2 个答案:

答案 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。

在所有示例中,他们返回原因的原因是==检查相同的valueis检查两者是否指向同一个对象。< / p>

因此,在第一种情况下,fooTrue,但它们的值不同。同样,foo未指向与True相同的值,这就是它返回false的原因。其余的例子继续采用相同的模式。