Подтвердить что ты не робот

Лучше ли использовать "is" или "==" для сравнения чисел в Python?

Лучше ли использовать оператор "is" или "==" для сравнения двух чисел в Python?

Примеры:

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

Ответ 1

Используйте ==.

Иногда, на некоторых реализациях python, по совпадению, целые числа от -1 до 256 будут работать с is. Но не полагайтесь на это или не используйте его в реальных программах.

Ответ 2

Другие ответили на ваш вопрос, но я расскажу немного подробнее:

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).

Ответ 3

>>> a = 255556
>>> a == 255556
True
>>> a is 255556
False

Я думаю, что это должно ответить на него, -)

Причина в том, что некоторые часто используемые объекты, такие как логические значения True и False, все 1-буквенные строки и короткие числа выделяются один раз интерпретатором, и каждая переменная, содержащая этот объект, ссылается на нее. Другие номера и более крупные строки выделяются по требованию. Например, 255556 выделяется три раза, каждый раз, когда создается другой объект. И поэтому, согласно is, они не одинаковы.

Ответ 4

Это будет работать только для небольших чисел, и я предполагаю, что это также зависит от реализации. Python использует тот же экземпляр объекта для небольших чисел (iirc < 256), но это изменяется для больших чисел.

>>> a = 2104214124
>>> b = 2104214124
>>> a == b
True
>>> a is b
False

Поэтому вы должны всегда использовать == для сравнения чисел.

Ответ 5

== - это то, что вы хотите, "есть", просто происходит с вашими примерами.

Ответ 6

>>> 2 == 2.0
True
>>> 2 is 2.0
False

Использовать ==

Ответ 7

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)