我最近遇到了这个语法,我不知道有什么不同。
如果有人能告诉我其中的区别,我会很感激。
我最近遇到了这个语法,我不知道有什么不同。
如果有人能告诉我其中的区别,我会很感激。
在这种情况下,它们是一样的。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对象 你还能怎么把它弄到 比较True和它自己?)
实际上,没有太大区别,因为自定义比较操作符很少。但您应该使用is None作为一般规则。
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
这取决于与None比较的是什么。一些类具有自定义比较方法,将== None与is None区别对待。
特别是,a == None的输出甚至不必是布尔值!!- bug的常见原因。
对于一个特定的例子,取一个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