“;”是“none”;and "== None"

我最近遇到了这个语法,我不知道有什么不同。

如果有人能告诉我其中的区别,我会很感激。

291975 次浏览

在这种情况下,它们是一样的。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"

答案是解释在这里

引用:

类可以自由实现 它选择任何方式进行比较,而它 可以选择做对比吗 没有意味着什么(实际上 是有意义的;如果有人让你这么做 实现来自的None对象 你还能怎么把它弄到

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

class Foo:
def __eq__(self,other):
return True
foo=Foo()


print(foo==None)
# True


print(foo is None)
# False

如果你使用numpy,

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

会给你错误时,numpy做elementwise比较

这取决于与None比较的是什么。一些类有自定义比较方法,将== Noneis None区别对待。

特别是a == None 甚至不必是布尔!!的输出-一个经常导致错误的原因。

对于一个特定的例子,取一个numpy数组,其中==比较是elementwise实现的:

import numpy as np
a = np.zeros(3) # now a is array([0., 0., 0.])
a == None #compares elementwise, outputs array([False, False, False]), i.e. not boolean!!!
a is None #compares object to object, outputs False