Любопытно:
>>> 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'
, кажется хорошим питоническим способом написать это и это более читабельно, чем "правильный" способ.
Поскольку строки неизменяемы, каковы технические подробности того, почему это неправильно? Когда проверка личности лучше, а когда проверка равенства?
Необходимо предупредить PyCharm, когда Вы используете is
с литералом с предупреждением такой как SyntaxWarning: "is" with a literal. Did you mean "=="?
. Так, при сравнении литералу всегда используйте ==
. Иначе можно предпочесть использовать is
для сравнения объектов через их ссылки.