-1

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

4

2 回答 2

2

你需要阅读这个:https ://docs.python.org/2/library/stdtypes.html#truth-value-testing

'foo' == True  # -> False
'' == True     # -> False
'' == False    # -> False

永远都是False。字符串不等于 a bool。但是 - 是的 - bool('non-empty-str') -> True; bool('') -> False.

等等你的其他“奥秘”。

is比较两个对象的身份id()(这里也有一些谜团:Python 中的整数缓存是什么?

这也可能很有趣:Python 中的 False == 0 和 True == 1 是实现细节还是由语言保证?

于 2015-09-05T10:57:42.387 回答
2

这是因为0''False在 Python 中,而非空字符串和非零整数是 True。

在您的所有示例中,它们从您的期望中返回的原因是因为==检查相同value,同时is检查两者是否指向同一个对象。

所以在第一种情况下,foois True,但它们的值不同。同样,没有指向与它返回 false 的原因foo相同的值。True其余示例继续使用相同的模式。

于 2015-09-05T11:00:37.590 回答