“ not ==”和“!=”有什么区别?

时间:2018-07-19 19:59:53

标签: python python-3.x operators equality

我正在看Google,但是找不到答案。

if 5 != 10:
    print('True')

# True

if not 5 == 10:
    print('True')

# True

两者似乎都一样。什么时候使用“ not ==”,什么时候使用“!=”?

3 个答案:

答案 0 :(得分:4)

这些语句等效,只要==返回!=的逻辑逆。对于大多数数据类型,这是一个有效的假设,但是Python允许专门实现==!===的{​​{3}}和{{1}的__eq__ }。因此,这实际上取决于您使用的数据类型。

!===甚至可能不返回布尔值,它们甚至不必返回相同的数据类型。这为自定义结果提供了另一种可能性:通过__ne__,可以通过truth value testing(或Python 2中的!=)方法(除其他方法外)自定义

但是对于整数,两种方法都是等效的。但是,我将始终使用__nonzero方法。意图更清楚,时间更短。

仅举一个语句不相等的示例,让我们以实现了!=和{{1的数据类型,例如NumPy数组(只是为了命名以不同方式实现运算符的流行数据结构)命名}}返回另一个包含布尔值的NumPy数组,并实现==引发异常:

!=

但是如果您在__bool__中使用了其中任何一个,都会引发异常。

答案 1 :(得分:3)

在与两个整数进行比较的情况下,它们是相同的。最好将reload!设为pythonic。

如果任一操作数是自定义类的实例,则结果可能会有所不同。自定义类可以自由地独立重写!===运算符(即使是疯狂的结果)

从LHS:

!=

从RHS:

>>> class A:
...     def __eq__(self, other):
...         return False
...     def __ne__(self, other):
...         return False
...     
>>> a = A()
>>> a != 5
False
>>> not a == 5
True

答案 2 :(得分:-2)

正如您在结果中看到的,两者含义相同,检查一个值是否与另一个值不同,这是一个优先事项...