Когда использовать ==, а когда?

Любопытно:

>>> a = 123
>>> b = 123
>>> a is b
True
>>> a = 123.
>>> b = 123.
>>> a is b
False

Кажется, a is b более или менее определяется как id (a ) == id (b) . Ошибки вносить легко:

basename, ext = os.path.splitext(fname)
if ext is '.mp3':
    # do something
else:
    # do something else

Некоторые fname неожиданно попали в блок else. Исправление простое, мы должны использовать вместо него ext == '.mp3' , но, тем не менее, , если ext на первый взгляд является '.mp3' , кажется хорошим питоническим способом написать это и это более читабельно, чем "правильный" способ.

Поскольку строки неизменяемы, каковы технические подробности того, почему это неправильно? Когда проверка личности лучше, а когда проверка равенства?

23
задан wim 14 March 2015 в 08:49
поделиться

1 ответ

Необходимо предупредить PyCharm, когда Вы используете is с литералом с предупреждением такой как SyntaxWarning: "is" with a literal. Did you mean "=="?. Так, при сравнении литералу всегда используйте ==. Иначе можно предпочесть использовать is для сравнения объектов через их ссылки.

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

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