Python 为什么总是要用“是”或“不是”来比较像“无”这样的单身汉?

Python 为什么总是要用“是”或“不是”来比较像“无”这样的单身汉?,python,pep8,Python,Pep8,在PEP 8标准中,以下建议的原因是什么:“应始终使用“是”或“不是”来进行与“无”这样的单例的比较,永远不要使用相等运算符。”可能是性能原因is比较是直接比较id,而不调用对象的eq ==和=是相等性测试,它们调用\uuuuu eq\uuu方法检查操作符的左侧是否表示与右侧相同的对象 是和不是是身份测试,它们检查操作员的左手侧和右手侧是否引用相同的对象 首选对单例对象进行标识测试,因为: 它们防止其他对象模仿单体对象: class FakeNone: def __eq__(self,

在PEP 8标准中,以下建议的原因是什么:“应始终使用“是”或“不是”来进行与“无”这样的单例的比较,永远不要使用相等运算符。”

可能是性能原因is比较是直接比较id,而不调用对象的eq

==
=
是相等性测试,它们调用
\uuuuu eq\uuu
方法检查操作符的左侧是否表示与右侧相同的对象

不是
是身份测试,它们检查操作员的左手侧和右手侧是否引用相同的对象

首选对单例对象进行标识测试,因为:

  • 它们防止其他对象模仿单体对象:

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


  • 首先,它使意图更加明确。测试
    是针对同一对象的两个值,而不仅仅是值相等。此外,
    =
    如果
    则始终为真(但相反的情况并不总是真);你可能会得到不一致的答案==我没有理由相信#1,为什么没有好的理由会有人这样做?这就像说我们应该使用
    is
    而不是
    =
    来处理小整数和内部字符串,以防止有人模仿它们的相等,这当然是荒谬的,因为
    0==0是有用的。
    等等。