Сравнение строк в Python: is vs. == [duplicate]

Для VS 2015 я нашел расширение , которое делает именно это. Кажется, что он работает хорошо и имеет достаточно большой объем загрузок. Поэтому, если вы не можете или не хотите использовать Resharper, вы можете установить этот вариант.

UPDATE

Вы также можете приобрести его через nuget

506
задан Coquelicot 21 August 2014 в 18:12
поделиться

3 ответа

Для всех встроенных объектов Python (таких как строк, списков, dicts, функций, и т.д.), если x равно y, то x==y также будет истинным.

Не всегда. NaN является контрпримером. Но обычно, тождество (есть) подразумевает равенство (==). Обратное не верно: два разных объекта могут иметь одинаковое значение.

Кроме того, считается ли, что по умолчанию лучше просто использовать '==', даже даже при сравнении значений int или Boolean?

Вы используете == при сравнении значений и is при сравнении тождеств.

При сравнении ints (или неизменяемых типов в целом) вы практически всегда хотите использовать первое. Существует оптимизация, позволяющая сравнивать небольшие целые числа с помощью is, но не стоит на нее полагаться.

Для булевых значений вообще не следует выполнять сравнение. Вместо:

if x == True:
    # do something

пишите:

if x:
    # do something

Для сравнения с None, is None предпочтительнее, чем == None.

Мне всегда нравилось использовать 'is', потому что я нахожу его более эстетически приятным и питоническим (вот как я попал в в эту ловушку...), но мне интересно, предназначен ли он предназначен только для тех случаев, когда вы заботитесь о поиске двух объектов с одинаковым идентификатором.

Да, именно для этого.

589
ответ дан 22 November 2019 в 22:29
поделиться

Я хотел бы показать небольшой пример того, как is и == задействованы в неизменяемых типах. Попробуйте так:

a = 19998989890
b = 19998989889 +1
>>> a is b
False
>>> a == b
True

is сравнивает два объекта в памяти, == сравнивает их значения. Например, вы можете увидеть, что маленькие целые числа кэшируются Python:

c = 1
b = 1
>>> b is c
True

Вы должны использовать == при сравнении значений и is при сравнении тождеств. (Также, с английской точки зрения, "equals" отличается от "is")

.
253
ответ дан 22 November 2019 в 22:29
поделиться

См. Этот вопрос

Ваша логика чтения

Для всех встроенных объектов Python (например, строки, списки, диктовки, функции, и т. д.), если x равно y, то x == y также Правда.

немного ошибочен.

Если имеет значение , то == будет истинным, но НЕ применяется в обратном порядке. == может дать True, а is дает False.

26
ответ дан 22 November 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: