Ben*_*ein 260
答案在这里解释.
报价:
一个类可以按照它选择的任何方式自由地实现比较,并且它可以选择与None进行比较意味着什么(实际上是有意义的;如果有人告诉你从头开始实现None对象,那么你怎么能得到它来比较True反对自己?).
实际上,由于自定义比较运算符很少,因此差别不大.但你应该is None作为一般规则使用.
unu*_*tbu 132
class Foo:
def __eq__(self,other):
return True
foo=Foo()
print(foo==None)
# True
print(foo is None)
# False
Run Code Online (Sandbox Code Playgroud)
Don*_*ner 53
在这种情况下,它们是相同的.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
Run Code Online (Sandbox Code Playgroud)
但由于只有一个None,它们将始终相同,is并将返回True.
p = None
q = None
p is q # True because they are both pointing to the same "None"
Run Code Online (Sandbox Code Playgroud)
PGl*_*ivi 23
这取决于您与 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
Run Code Online (Sandbox Code Playgroud)
如果你使用 numpy,
if np.zeros(3)==None: pass
Run Code Online (Sandbox Code Playgroud)
当 numpy 进行元素比较时会给你错误
| 归档时间: |
|
| 查看次数: |
141462 次 |
| 最近记录: |