Почему я должен привести int к bool перед проверкой "True"? - PullRequest
0 голосов
/ 26 января 2020

В моем файле url.py в Django есть следующая строка:

if bool(settings.DEBUG) is True:

Это хорошо работает, потому что settings.DEBUG == 1, поэтому оно равно True после функции bool (). Однако мне нужно было добавить bool (), чтобы он работал. Исходная строка не работала, и исходная строка была:

if settings.DEBUG is True:

Это всегда оценивается как False, даже когда settings.DEBUG == 1.

Почему значение 1 оценивается как False когда я не преобразую его явно в bool?

Другими словами, почему «1 - это правда» не оценивает true?

Обратите внимание, что я использую python 3 на тот случай, если имеет значение для ответа.

1 Ответ

2 голосов
/ 26 января 2020

На первый взгляд, это может сбивать с толку, поскольку, конечно, значение «1» должно равняться истинному, верно? Однако что, если это значение int равно '99', должно ли это быть также истинным?

Сравнивая int со значением Boolean в компиляторе python, это все равно, что сравнивать яблоки с апельсинами, что невозможно, поэтому по умолчанию в 'false'.

Оборачивая значение int в bool (функцию), вы объявляете компилятору python, что значение int рассматривается как логическое значение (поэтому 0 == False, 1 == True) это работает, как вы хотели.

Надеюсь, это поможет:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...