“is None”和“== None”之间的区别是什么?

我最近遇到这个语法,我不知道其中的差别。

如果有人能告诉我不同​​,我将不胜感激。

答案在这里解释。

去引用:

一个类可以自由地执行比较任何它select的方式,它可以select做比较None意味着什么(这实际上是有道理的;如果有人告诉你从零开始实现None对象,你会怎么得到它比较真反对自己?)。

实际上,自定义比较运算符很less,没有太大的区别。 但是你应该使用is None作为一般规则。

 class Foo: def __eq__(self,other): return True foo=Foo() print(foo==None) # True print(foo is None) # False 

在这种情况下,他们是一样的。 None一个是单身物件(只存在一个None )。

检查对象是否是相同的对象,而==只是检查它们是否相等。

例如:

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

但是既然只有一个None ,他们将永远是一样的,并且会返回True。

 p = None q = None p is q # True because they are both pointing to the same "None" 

如果你使用numpy,

 if np.zeros(3)==None: pass 

当numpy做元素比较时会给你错误