Python中的逻辑悖论?

11 投票
4 回答
830 浏览
提问于 2025-04-16 20:31

我遇到了一种情况,"not None"同时等于True和False。

>>> not None
True

>>> not None == True
True

>>> not None == False
True

一开始我以为这是因为运算符的顺序问题,但当我测试了一个类似的表达式后:

>>> not False
True

>>> not False == False
False

>>> not False == True
True

有没有人能解释一下这是为什么呢?

4 个回答

2

这是扩展的顺序。Python 是这样读取它们的:

o>>> not (None == True)
True
>>> not (None == False)
True
>>> not False
True
>>> not (False == False)
False
>>> not (False == True)
True
>>>

我觉得这样说很清楚。

4

这确实是因为运算符的优先级问题。not None == False 这个表达式会被计算成 not (None == False)。这里的 None == False 结果是 False,这就解释了你的结果。

你可以试试这个:

>>> (not None) == True
True
>>> (not None) == False
False
21

由于运算符的优先级。not none == True 的意思是 not (None == True),也就是 None != True,这个结果是对的。同样,None != False 也是对的。值 None 和布尔值(真和假)是不同的。

你最后的两个表达式分别是 False != False,这个结果是错的;还有 False != True,这个结果是对的。

撰写回答