2024-04-26 09:24:28 发布
网友
在Python中,使用“Is”操作符还是“==”操作符比较两个数字更好?
示例:
>>> a = 1 >>> a is 1 True >>> a == 1 True >>> a is 0 False >>> a == 0 False
其他人已经回答了您的问题,但我将更详细地介绍一下:
Python的is比较身份-它会问这样一个问题:“这一件事实际上与另一件事是同一个对象吗”(类似于Java中的==)。因此,有时使用is是有意义的-最常见的一种是检查None。例如,foo is None。但是,总的来说,这不是你想要的。
is
==
None
foo is None
另一方面,==则提出一个问题:“这件事在逻辑上是否等同于另一件事”。例如:
>>> [1, 2, 3] == [1, 2, 3] True >>> [1, 2, 3] is [1, 2, 3] False
这是真的,因为类可以定义用于测试相等性的方法:
>>> class AlwaysEqual(object): ... def __eq__(self, other): ... return True ... >>> always_equal = AlwaysEqual() >>> always_equal == 42 True >>> always_equal == None True
但它们不能定义用于测试身份的方法(即,它们不能重写is)。
>>> a = 255556 >>> a == 255556 True >>> a is 255556 False
我认为这应该可以回答;-)
原因是一些经常使用的对象,比如布尔值True和False,所有1个字母的字符串和短数字都由解释器分配一次,每个包含该对象的变量都引用它。其他数字和较大的字符串按需分配。例如,每次创建不同的对象时,255556被分配三次。因此,根据is,它们是不同的。
使用==。
有时,在一些python实现中,碰巧-5到256之间的整数将与is一起工作(例如在CPython实现中)。但不要依赖它或在实际程序中使用它。
其他人已经回答了您的问题,但我将更详细地介绍一下:
Python的
is
比较身份-它会问这样一个问题:“这一件事实际上与另一件事是同一个对象吗”(类似于Java中的==
)。因此,有时使用is
是有意义的-最常见的一种是检查None
。例如,foo is None
。但是,总的来说,这不是你想要的。另一方面,
==
则提出一个问题:“这件事在逻辑上是否等同于另一件事”。例如:这是真的,因为类可以定义用于测试相等性的方法:
但它们不能定义用于测试身份的方法(即,它们不能重写
is
)。我认为这应该可以回答;-)
原因是一些经常使用的对象,比如布尔值True和False,所有1个字母的字符串和短数字都由解释器分配一次,每个包含该对象的变量都引用它。其他数字和较大的字符串按需分配。例如,每次创建不同的对象时,255556被分配三次。因此,根据
is
,它们是不同的。使用
==
。有时,在一些python实现中,碰巧-5到256之间的整数将与
is
一起工作(例如在CPython实现中)。但不要依赖它或在实际程序中使用它。相关问题 更多 >
编程相关推荐