我最近遇到了这个语法,我不知道有什么不同。
如果有人能告诉我其中的区别,我会很感激。
在这种情况下,它们是一样的。None是一个单例对象(只存在一个None)。
None
is检查对象是否相同,而==只检查它们是否相等。
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作为一般规则。
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比较的是什么。一些类有自定义比较方法,将== None与is None区别对待。
== None
特别是a == 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