9

如果是类实例not x,可以x==None给出不同的答案吗?x

我的意思是如果是类实例,如何not x评估?x

4

5 回答 5

12

是的,它可以给出不同的答案。

x == None

将调用该__eq__()方法来评估运算符并与单例相比给出实现的结果None

not x

将调用__nonzero__()(__bool__()在 python3 中) 方法来评估运算符。解释器将使用上述方法转换x为 boolean( ),然后由于操作符而反转其返回值。bool(x)not

x is None

表示引用 x 指向None对象,该对象是单例类型NoneType,在比较中将评估为 false。is操作员测试对象身份,因此比较的两个对象是否是对象的同一实例,而不是相似的对象。

于 2013-06-22T16:43:50.627 回答
4
class A():
    def __eq__(self, other):  #other receives the value None
        print 'inside eq'
        return True
    def __nonzero__(self):    
        print 'inside nonzero'
        return True
...     
>>> x = A()
>>> x == None      #calls __eq__
inside eq
True
>>> not x          #calls __nonzero__
inside nonzero
False

not x相当于:

not bool(x)

派3.x:

>>> class A(object):
        def __eq__(self, other):    #other receives the value None
                print ('inside eq')
                return True
        def __bool__(self):    
                print ('inside bool')
                return True
...     
>>> x = A()
>>> x == None       #calls __eq__
inside eq
True
>>> not x           #calls __bool__ 
inside bool 
False
于 2013-06-22T16:45:48.690 回答
2

是的; not使用__bool__(在 Python 3 中;Python 2 使用__nonzero__),并且x == None可以被__eq__.

(两者都显示在这里。)

于 2013-06-22T16:47:41.220 回答
0

如果xnot表示,反之亦然。

x == None意味着它只会是Trueif x is Noneis Trueelse False。检查这个

积极的意思if是选择了块。True也是积极的。

于 2013-06-22T17:46:43.420 回答
-1

not x适用于多种值,例如0None""False[]{}等。

x == None仅适用于一个特定值None

如果x是一个类实例,那么两者not xx == None都将为假,但这并不意味着它们是等价的表达式。


美好的; 前一段应改为:

如果x是一个类实例,那么两者not xx == None都将是假的,除非有人在用类定义玩愚蠢的虫子。

于 2013-06-22T16:46:17.457 回答