“is None” 和 “== None” 有什么区别
- 2024-12-18 08:39:00
- admin 原创
- 143
问题描述:
我最近遇到了这种语法,但我不知道它有什么区别。
如果有人能告诉我其中的区别我将非常感激。
解决方案 1:
答案在这里解释。
引用:
一个类可以自由地选择任何方式来实现比较,并且可以选择使与 None 的比较有意义(这实际上是有道理的;如果有人告诉你从头开始实现 None 对象,你还能怎样让它将 True 与自身进行比较?)。
从实际情况来看,由于自定义比较运算符很少见,因此没有太大区别。但您应该将is None
其作为一般规则使用。
解决方案 2:
class Foo:
def __eq__(self, other):
return True
foo = Foo()
print(foo == None)
# True
print(foo is None)
# False
解决方案 3:
在这种情况下,它们是相同的。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"
解决方案 4:
这取决于您要与 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
解决方案 5:
如果你使用 numpy,
if np.zeros(3) == None: pass
当 numpy 进行元素比较时会出现错误。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD