为什么与单例(如None)的比较应始终使用is或is not?
在PEP 8标准中,这里,为什么会有这样的建议:“与像None这样的单例进行比较时,应该始终使用is或is not,而不是使用相等运算符”?
2 个回答
-2
这可能是出于性能考虑。使用is来比较时,是直接比较对象的身份(id),而不是调用对象的eq方法。
1
==
和 !=
是用来比较两个东西是否相等的,它们会调用 __eq__
这个方法来检查左边的东西和右边的东西是否是同一个对象。
is
和 is not
是用来检查两个东西是否是同一个对象的,它们会查看左边和右边的东西是否指向同一个对象。
对于单例对象来说,使用身份测试更好,原因有:
它们可以防止其他对象模仿单例对象:
class FakeNone: def __eq__(self, other): return other is None print FakeNone() is None # False print FakeNone() == None # True ... WHAT?
它们稍微快一点,因为不需要调用方法。