2024-04-26 10:39:00 发布
网友
在PEP8标准中,here,下面建议的原因是什么:“像None这样的单例比较应该始终使用is或is not,永远不要使用相等运算符。”
==和!=是相等性检验,它们调用__eq__方法来检查操作符的左侧是否表示与右侧相同的对象。在
==
!=
__eq__
is和is not是身份测试,它们检查操作符的左手边和右手边是否引用相同的对象。在
is
is not
对于单例对象,首选身份测试,因为:
它们阻止其他对象模仿单例对象:
class FakeNone: def __eq__(self, other): return other is None print FakeNone() is None # False print FakeNone() == None # True ... WHAT?
因为不需要调用方法,所以它们稍微快一点。
可能是性能原因。is比较是在不调用对象的eq的情况下直接比较id。在
==
和!=
是相等性检验,它们调用__eq__
方法来检查操作符的左侧是否表示与右侧相同的对象。在is
和is not
是身份测试,它们检查操作符的左手边和右手边是否引用相同的对象。在对于单例对象,首选身份测试,因为:
它们阻止其他对象模仿单例对象:
因为不需要调用方法,所以它们稍微快一点。
可能是性能原因。is比较是在不调用对象的eq的情况下直接比较id。在
相关问题 更多 >
编程相关推荐