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