在Python中使用“Is”或“==”进行数字比较更好吗?

2024-04-26 09:24:28 发布

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

在Python中,使用“Is”操作符还是“==”操作符比较两个数字更好?

示例:

>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False

Tags: falsetrue示例is数字
3条回答

其他人已经回答了您的问题,但我将更详细地介绍一下:

Python的is比较身份-它会问这样一个问题:“这一件事实际上与另一件事是同一个对象吗”(类似于Java中的==)。因此,有时使用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实现中)。但不要依赖它或在实际程序中使用它。

相关问题 更多 >