这只是编写相同代码的两种方法吗?我应该注意哪些功能上的差异?
>>> a = 'foo'
>>> if not a == 'bar':
... 'its not'
...
'its not'
>>> if a != 'bar':
... 'its not'
...
'its not'
答案 0 :(得分:6)
在python中,要检查对象是否等于另一个对象,可以调用特殊函数。调用__eq__
来检查==
,同时调用__ne__
来检查!=
通常,对象可以与__ne__
不同地定义__eq__
。
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
然而,这将是特别邪恶的......你通常不应该担心这一点。
答案 1 :(得分:1)
not a == b
被转换为对not a.__eq__(b)
的调用,而a != b
被转换为对a.__ne__(b)
的调用。在大多数情况下(我能想到的几乎每个普通对象),__ne__
被定义为def __ne__(self, other): not self.__eq__(other)
,因此没有功能差异。但是,您可以轻松创建一个既相同又不等于其他值的精神病对象,只需以正确的方式覆盖__ne__
(尽管我无法想到现在有意义的情况)
另一方面,内置对象可能以比a != b
稍快的方式实现not a == b
,但可能没有任何明显的数量。