is None" 和 "== None" 有什么区别?
我最近遇到了这种语法,但我不知道它们之间有什么区别。
如果有人能告诉我它们的不同之处,我会非常感激。
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
。