繁体   English   中英

“是无”和“==无”有什么区别

[英]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 比较的是什么。 某些类具有自定义比较方法,将== Noneis 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM