[英]What is the difference between "is None" and "== None"
我最近遇到了这种语法,我不知道其中的区别。
如果有人能告诉我其中的区别,我将不胜感激。
答案在这里解释。
报价:
一个类可以自由地以它选择的任何方式实现比较,并且它可以选择与 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
检查对象是否是同一个对象,而 == 只是检查它们是否相等。
例如:
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 比较的是什么。 某些类具有自定义比较方法,将== None
与is None
区别对待。
特别是a == None
的输出甚至不必是布尔值 !! - 一个常见的错误原因。
对于一个特定的例子,采用一个 numpy 数组,其中==
比较是按元素实现的:
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
如果你使用 numpy,
if np.zeros(3)==None: pass
当 numpy 进行元素比较时会给你错误
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.