为什么总是要用“是”还是“不是”来与“无”进行比较?

2024-04-26 10:39:00 发布

您现在位置:Python中文网/ 问答频道 /正文

在PEP8标准中,here,下面建议的原因是什么:“像None这样的单例比较应该始终使用is或is not,永远不要使用相等运算符。”


Tags: none标准hereisnot原因运算符建议
2条回答

==!=相等性检验,它们调用__eq__方法来检查操作符的左侧是否表示与右侧相同的对象。在

isis not身份测试,它们检查操作符的左手边和右手边是否引用相同的对象。在

对于单例对象,首选身份测试,因为:

  1. 它们阻止其他对象模仿单例对象:

    class FakeNone:
        def __eq__(self, other):
            return other is None
    
    print FakeNone() is None        # False
    print FakeNone() == None        # True ... WHAT?
    
  2. 因为不需要调用方法,所以它们稍微快一点。

可能是性能原因。is比较是在不调用对象的eq的情况下直接比较id。在

相关问题 更多 >