Простейшая причина не сравнивать правду с помощью ==
или !=
сравнений выглядит так:
0 is False # Result: False
0 == False # Result: True; 0 evaluates comparatively to False
1 is True # Result: False
1 == True # Result: True; 1 evaluates comparatively to True
is
проверяет, является ли переданное значение точно True
/ False
, не имеет значения от до True
или False
.
Такое поведение позволяет это:
if var is False:
# False (bool) case
elif var is None:
# None case
elif var == 0:
# integer 0 case
, тогда как
if var == False:
# catches False & 0 case; but not None case, empty string case, etc.
, что кажется нелогичным - вот почему я ожидаю, что PEP8 говорит: «не делайте этого»».
Как сказано здесь используйте is
для идентичности , но используйте ==
для равенства .
You 'я хочу использовать if var is True
только когда вам нужно значение bool True
, но вы хотите отклонить 1
, 'some string'
и т. д.
Такие случаи, вероятно, не очевидны для большинства читателей;Я подозреваю, что PEP8 утверждает, что это «хуже», потому что оно потенциально вводит в заблуждение.Время от времени это может быть необходимым злом;но ... если вам понадобится is True
, может указывать на проблему с дизайном.В любом случае, вы, вероятно, должны прокомментировать «почему», вам нужно точно True
или False
, если вы когда-либо используете is
.