Лучше ли использовать оператор "is" или "==" для сравнения двух чисел в Python?
Примеры:
>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False
Лучше ли использовать оператор "is" или "==" для сравнения двух чисел в Python?
Примеры:
>>> a = 1
>>> a is 1
True
>>> a == 1
True
>>> a is 0
False
>>> a == 0
False
Используйте ==
.
Иногда, на некоторых реализациях python, по совпадению, целые числа от -1 до 256 будут работать с is
. Но не полагайтесь на это или не используйте его в реальных программах.
Другие ответили на ваш вопрос, но я расскажу немного подробнее:
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 использует тот же экземпляр объекта для небольших чисел (iirc < 256), но это изменяется для больших чисел.
>>> a = 2104214124
>>> b = 2104214124
>>> a == b
True
>>> a is b
False
Поэтому вы должны всегда использовать ==
для сравнения чисел.
== - это то, что вы хотите, "есть", просто происходит с вашими примерами.
>>> 2 == 2.0
True
>>> 2 is 2.0
False
Использовать ==
import math
def Compare(x,y):
if x==y:
print x," is equal to ",y
elif x>y:
print x," is grater than ",y
else:
print x," is less than ",y
def App():
print"Enter a number "
a = raw_input()
int(a)
print"Enter second value"
b = raw_input()
int(b)
Compare(a,b)