is None" 和 "== None" 有什么区别?

551 投票
5 回答
338813 浏览
提问于 2025-04-16 01:21

我最近遇到了这种语法,但我不知道它们之间有什么区别。

如果有人能告诉我它们的不同之处,我会非常感激。

5 个回答

69

在这种情况下,它们是一样的。None 是一个单例对象(也就是说,世界上只有一个 None)。

is 用来检查两个对象是否是同一个对象,而 == 只是检查它们的值是否相等。

举个例子:

p = [1]
q = [1]
p is q  # False because they are not the same actual object
p == q  # True because they are equivalent

但是因为只有一个 None,所以它们总是相同的,is 会返回 True。

p = None
q = None
p is q  # True because they are both pointing to the same "None"
232
class Foo:
    def __eq__(self, other):
        return True
foo = Foo()

print(foo == None)
# True

print(foo is None)
# False

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

497

这个答案的详细解释可以在这里找到。

引用一下:

一个类可以自由选择实现比较的方式,它可以决定与None进行比较时意味着什么(这其实是有道理的;如果有人让你从头开始实现None对象,你会怎么让它跟自己比较为真呢?)。

实际上,差别不大,因为自定义比较操作符的情况很少见。不过,作为一般规则,你应该使用is None

撰写回答