这只是两种方式来编写相同的代码?我应该注意到有什么功能差异吗?是否有显着差异:如果不是== =='酒吧',如果!='酒吧'?
>>> a = 'foo'
>>> if not a == 'bar':
... 'its not'
...
'its not'
>>> if a != 'bar':
... 'its not'
...
'its not'
这只是两种方式来编写相同的代码?我应该注意到有什么功能差异吗?是否有显着差异:如果不是== =='酒吧',如果!='酒吧'?
>>> a = 'foo'
>>> if not a == 'bar':
... 'its not'
...
'its not'
>>> if a != 'bar':
... 'its not'
...
'its not'
在python中,为了检查一个对象是否等于或不等于另一个对象,调用特殊函数。 __eq__
被称为检查==
,而__ne__
被称为检查!=
一般来说,对象可能不是__eq__
定义__ne__
不同。
E.g.
class Junk(object):
def __ne__(self, other):
return False
def __eq__(self, other):
return False
j = Junk()
print not j == 1
print j != 1
这产生了:
True
False
然而,这将是非常邪恶的......通常你应该永远不必担心这个问题。
奇怪!什么是一个人会真正想要“a .__ ne __(b)!=不是.__ eq __(b)`? – wim 2011-12-15 02:49:50
not a == b
被翻译为致电not a.__eq__(b)
,而a != b
被翻译为致电a.__ne__(b)
。大多数情况下(几乎所有我能想到的正常对象),__ne__
被定义为def __ne__(self, other): not self.__eq__(other)
,所以没有功能差异。但是,您可以轻松创建一个与其他值相同并且不等于其他值的精神病对象,只需以正确的方式覆盖__ne__
(尽管我无法想象现在这种情况会有意义的情况)。
另一方面,内建对象可能以比not a == b
稍快的方式实施a != b
,但可能不会有任何明显的量。
当你使用`timeit`时,你发现了什么? – 2011-12-15 02:55:47