布尔、等价和对象标识符的神秘案例

2024-06-28 21:38:37 发布

您现在位置:Python中文网/ 问答频道 /正文

弦的第一个奥秘:
为什么bool('foo')返回True

if
'foo' == True returns False
'foo' == False returns False
'foo' is True returns False
'foo' is False returns False

第二个整数之谜:
为什么bool(5)返回True

if
5 == True returns False
5 == False returns False
5 is True returns False
5 is False returns False

第三个零之谜:
为什么bool(0)返回False

if
0 == True returns False
0 == False returns True <-- Special Case
0 is True returns False
0 is False returns False

我知道Python的一些真实性,然而,这一切似乎有点神秘。有人能解释一下吗?你知道吗


Tags: falsetrueiffoois整数returnsbool
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') -> Truebool('') -> 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?

这是因为0''在Python中都是False,而非空字符串和非零整数都是真的。你知道吗

在您的所有示例中,它们从您的期望返回的原因是==检查相同的value,而is检查两者是否指向相同的对象。你知道吗

所以在第一种情况下,fooTrue,但它们不是相同的值。另外,fooTrue指向的值不同,这就是它返回false的原因。其余的示例继续使用相同的模式。你知道吗

相关问题 更多 >