Из этой статьи вы узнаете, что такое истинные и ложные значения, что делает значение истинным или ложным, как использовать функцию bool()
, чтобы определить истинность или ложность значения, и как сделать объекты из пользовательских классов истинными или ложными с помощью специального метода __bool__()
.
Давайте начнем!
Истинность и ложность значений
Выражения с операндами и операторами оцениваются как True или False. Они могут использоваться в условиях или циклах, чтобы определить, должен ли выполняться блок кода.
Приведем пример:
# Выражение 5 < 3 >>> if 5 < 3: print("True") else: print("False") # Вывод: # False
В этом примере все работает так, как мы ожидали, потому что мы использовали выражение с двумя операндами и оператором 5 < 3
.
А что произойдет, если мы попытаемся запустить такой код?
>>> a = 5 >>> if a: print(a)
Обратите внимание, что теперь рядом с ключевым словом if
у нас нет типичного выражения, там всего лишь одна переменная:

Удивительно, но на выходе получается 5.
Но если мы изменим значение a
на ноль, вывода не будет:
>>> a = 0 >>> if a: print(a)
Переменная a
не является типичным выражением. У нее нет операторов и операндов. Так почему же она оценивается как True или False в зависимости от ее значения?
Ответ кроется в концепции истинности и ложности значений.
В Python отдельные значения могут оцениваться как True или False. Они не обязательно должны быть частью большого выражения, чтобы получить истинностное значение, поскольку уже имеют его в соответствии с правилами языка Python.
Основные правила таковы:
- Значения, которые оцениваются как False, считаются ложными.
- Значения, которые оцениваются как True, считаются истинными.
Согласно документации Python, любой объект можно проверить на истинность, чтобы использовать его в качестве условия в if
или while
или в качестве операнда булевых операций and
, or
, not
.
Булев контекст
Когда мы используем значение как часть более крупного выражения или как условие в if
или while
, мы используем его в булевом контексте.
Булевым контекстом можно считать отдельную часть вашего кода, значение которой должно быть либо True, либо False.
Например, условие после ключевого слова if
или после ключевого слова while
должно иметь значение True или False:

Совет. Значение можно хранить в переменной. Мы можем написать имя переменной после ключевого слова if
или while
вместо самого значения. Это обеспечит ту же функциональность.
Теперь, когда вы знаете, что такое истинные и ложные значения и как они работают в булевом контексте, давайте разберем, какие значения в Python считаются истинными, а какие — ложными.
Ложные значения
Последовательности и коллекции:
- Пустые списки
[]
- Пустые кортежи
()
- Пустые словари
{}
- Пустые множества
set()
- Пустые строки
""
- Пустые диапазоны
range(0)
Числа
- Ноль любого числового типа:
- Целое число:
0
- Число с плавающей точкой:
0.0
- Комплексное число:
0j
- Целое число:
Константы
- None
- False
Именно из-за ложности значения у нас не было вывода в нашем начальном примере, когда значение a
было равно нулю. Значение 0 является ложным, поэтому условие if
будет равно False и условие не будет выполняться:
>>> a = 0 >>> if a: print(a) # Вывода нет
Истинные значения
Согласно документации Python, по умолчанию объект считается истинным.
К истинным значениям относятся:
- Непустые последовательности или коллекции (списки, кортежи, строки, словари, множества)
- Числовые значения, не равные нулю
- True
Поэтому в приведенном ранее примере, когда значение a
было равно 5 (истинное значение), в выводе мы получили 5:
>>> a = 5 >>> if a: print(a) # Вывод: # 5
Встроенная функция bool()
Вы можете проверить, является ли значение истинным или ложным, с помощью встроенной функции bool()
.
Согласно документации Python, эта функция возвращает булево значение, то есть True или False. Аргумент преобразуется с помощью стандартной процедуры проверки на истинность.

Вам нужно только передать значение в качестве аргумента, например, так:
>>> bool(5) True >>> bool(0) False >>> bool([]) False >>> bool({5, 5}) True >>> bool(-5) True >>> bool(0.0) False >>> bool(None) False >>> bool(1) True >>> bool(range(0)) False >>> bool(set()) False >>> bool({5, 6, 2, 5}) True
Совет. В качестве аргумента можно передать переменную. Так вы проверите, является ли ее значение истинным или ложным.
Реальные примеры использования истинных и ложных значений
Использование истинных и ложных значений может помочь вам сделать ваш код более кратким и читабельным. Давайте разберем пару примеров.
У нас есть функция print_even()
, которая принимает в качестве аргумента список или кортеж, содержащий числа, и печатает только четные значения. Если аргумент пуст, то печатается сообщение:
def print_even(data): if len(data) > 0: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")
Обратите внимание на эту строчку:
if len(data) > 0:
Мы можем сделать условие гораздо более лаконичным, используя концепцию истинности и ложности значений:
if data:
Если список или кортеж data пуст, он будет оцениваться как False. Если он не пуст, то значение будет равно True. Мы получим ту же функциональность с более лаконичным кодом.
В итоге наша функция будет выглядеть так:
def print_even(data): if data: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")
И еще один пример. Мы также можем использовать истинность и ложность значений, чтобы вызвать исключение (ошибку), когда аргумент, переданный в функцию, не является валидным.
>>> def print_even(data): if not data: raise ValueError("The argument data cannot be empty") for value in data: if value % 2 == 0: print(value)
В данном случае, используя not data
в качестве условия в предложении if
, мы получаем противоположное значение истинности data
для условия if
.
Давайте разберем not data
более подробно.
Если объект data
(список или кортеж) пуст:
- Значение будет ложным, поэтому
data
будет оцениваться как False. not data
будет эквивалентноnot False
, что равно True.- Условие будет равно True.
- Возникнет исключение.
Если объект data
не пуст:
- Его значение будет истинным, поэтому оно будет оцениваться как True.
not data
будет эквивалентноnot True
, то есть False.- Условие будет равно False.
- Исключение не будет вызвано.
Создание пользовательских объектов с истинными и ложными значениями
Если вы знакомы с классами и объектно-ориентированным программированием, вы можете добавить специальный метод в ваши классы, чтобы заставить ваши объекты действовать как истинные и ложные значения.
Специальный метод __bool__()
С помощью специального метода __bool__()
можно задать «настраиваемое» условие, которое будет определять, когда объект вашего класса будет оцениваться как True или False.
Согласно документации Python, по умолчанию объект считается истинным, если в его классе не определен метод __bool__()
, который возвращает False, или метод __len__()
, который возвращает ноль при вызове этого объекта.
Например, у нас есть очень простой класс:
>>> class Account: def __init__(self, balance): self.balance = balance
Как видите, никаких специальных методов не определено, поэтому все объекты, которые вы создадите из этого класса, всегда будут оцениваться как True:
>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) True
Мы можем настроить это поведение, добавив специальный метод __bool__()
:
>>> class Account: def __init__(self, balance): self.balance = balance def __bool__(self): return self.balance > 0
Теперь, если баланс счета больше нуля, объект будет иметь значение True. В противном случае, если баланс счета равен нулю, объект будет иметь значение False.
>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) False
Совет. Если в классе не определен метод __bool__()
, но определен метод __len__()
, значение, возвращаемое этим методом, будет определять, является ли объект истинным или ложным.
Итоги
Истинные значения — это значения, которые в булевом контексте оцениваются как True. Ложные значения — это значения, которые в булевом контексте оцениваются как False.
К ложным значениям относятся пустые последовательности (списки, кортежи, строки, словари, множества), ноль любого числового типа, None и False.
Истинные значения включают непустые последовательности, числа (кроме 0 любого числового типа) и практически все значения, которые не являются ложными.
Используя истинность и ложность значений, можно сделать свой код более лаконичным.
Перевод статьи “Truthy and Falsy Values in Python: A Detailed Introduction”.