使用"is"运算符或"=="运算符来比较Python中的两个数字是否更好?
例子:
>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False
Run Code Online (Sandbox Code Playgroud)
Ign*_*ams 87
使用==.
有时,在一些python实现中,巧合的是,从-5到256的整数将起作用is(例如在CPython实现中).但不要依赖于此或在真实程序中使用它.
Dav*_*ver 24
其他人已经回答了你的问题,但我会详细介绍一下:
Python is比较身份 - 它问的问题是"这一件事与其他事物实际上是同一个对象"(类似于==Java).因此,有些时候使用is是有意义的 - 最常见的是检查None.例如,foo is None.但是,一般来说,这不是你想要的.
==另一方面,问一个问题"这一件事在逻辑上等同于另一件事".例如:
>>> [1, 2, 3] == [1, 2, 3]
True
>>> [1, 2, 3] is [1, 2, 3]
False
Run Code Online (Sandbox Code Playgroud)
这是正确的,因为类可以定义用于测试相等性的方法:
>>> class AlwaysEqual(object):
... def __eq__(self, other):
... return True
...
>>> always_equal = AlwaysEqual()
>>> always_equal == 42
True
>>> always_equal == None
True
Run Code Online (Sandbox Code Playgroud)
但他们无法定义用于测试身份的方法(即,他们无法覆盖is).
Wim*_*Wim 12
>>> a = 255556
>>> a == 255556
True
>>> a is 255556
False
Run Code Online (Sandbox Code Playgroud)
我认为应该回答;-)
原因是一些经常使用的对象,例如布尔值为True和False,所有单字母字符串和短数字都由解释器分配一次,并且包含该对象的每个变量都引用它.其他数字和更大的字符串按需分配.例如,每次创建不同的对象时,255556被分配三次.因此,根据is它们,它们并不相同.
这只适用于小数字,我猜它也依赖于实现.Python对小数字使用相同的对象实例(iirc <256),但是对于更大的数字,这会改变.
>>> a = 2104214124
>>> b = 2104214124
>>> a == b
True
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)
所以你应该总是==用来比较数字.
| 归档时间: |
|
| 查看次数: |
91583 次 |
| 最近记录: |