我最近遇到了这个语法,但我不知道它们之间的区别。
如果有人能告诉我它们之间的区别,我会非常感激。
如果有人能告诉我它们之间的区别,我会非常感激。
这个答案在这里有解释。
引用一下:
类可以自由地实现比较,可以选择让与None的比较表示某些含义(这其实是有意义的;如果有人让你从头开始实现None对象,你会如何让它与自己比较得出True?)。
就实际而言,自定义比较运算符不常见,因此没有太大区别。但你应该作为一般规则使用 is None
。
is None
速度比使用== None
快大约50%。 - Nas Banov- Nas Banovtimeit.Timer('None == None').timeit() | 0.328
is
基本上是整数比较,而 ==
不仅解决引用,还会比较可能具有不匹配类型的值。 - Pijusnclass Foo:
def __eq__(self, other):
return True
foo = Foo()
print(foo == None)
# True
print(foo is None)
# False
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"
x == None
可能会评估为 True
,即使 x
不是 None
,而是某个具有自定义等价运算符的类的实例。
https://dev59.com/1XA75IYBdhLWcg3wf5RV#3257957 - max这取决于您将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进行逐元素比较时,会给您报错。
np.array(None) is None
的结果是 False
。 - undefined
is
与==
的区别,还是关于None
的本质以及在不同上下文中行为差异的问题(后者是我来到这里的原因)。基于模糊和OP缺乏回应...我很惊讶这个问题有这么多赞。我的意思是...拜托...这个问题甚至没有写在实际问题中... - RTbecard