Они бывают разных типов.Хотя на практике они ведут себя совершенно одинаково.Вы также можете заменить False
на: ""
, []
, (,)
или 0
, и все будет работать в основном.Python автоматически преобразует вашу переменную в логическое значение, когда вы передаете ее if
, while
, любым логическим операторам (например, or
, and
и т. Д.) Или любой встроенной функции, ожидающей логическое значение (примечание: хотяor
и and
конвертируют ваше значение в логическое, решая, что возвращать, конечный результат будет вашим неконвертированным значением).Вот почему трудно различить разницу.
Однако большинство разработчиков считают, что None
похоже на значение null
в других языках, что является ошибкой или унифицированным значением.Whilist False
обычно считается ожидаемым и полностью инициализированным значением.Поэтому большинству людей будет проще читать ваш код, если вы будете придерживаться этого соглашения.
Продолжая эту тему, давайте рассмотрим реализацию на языке Python.Типичный оператор if будет преобразован в инструкцию POP_JUMP_IF_FALSE
(или POP_JUMP_IF_TRUE
).Вот как это реализовано:
TARGET(POP_JUMP_IF_FALSE) {
PyObject *cond = POP();
int err;
if (cond == Py_True) {
Py_DECREF(cond);
FAST_DISPATCH();
}
if (cond == Py_False) {
Py_DECREF(cond);
JUMPTO(oparg);
FAST_DISPATCH();
}
err = PyObject_IsTrue(cond);
Py_DECREF(cond);
if (err > 0)
;
else if (err == 0)
JUMPTO(oparg);
else
goto error;
DISPATCH();
}
Как вы можете видеть, если значение, переданное if
, является логическим значением, интерпретатор будет знать, что делать немедленно.В противном случае он вызовет PyObject_IsTrue, который попытается преобразовать объект в логическое значение, используя любые возможные способы (__bool__
, __nonzero__
, __len__
и даже сравнение с None
явно).