Логический тип bool и None

Логический тип bool и None

Вы уже познакомились с числами int и float, а также со строками str. Сегодня — ещё два специальных типа данных, которые встречаются буквально в каждой программе: логический тип bool и специальное значение None.

Логический тип bool

Тип bool (от boolean — по имени математика Джорджа Буля) имеет ровно два возможных значения: True (истина) и False (ложь). Обратите внимание на написание с заглавной буквы — это важно. true и false в нижнем регистре не являются ключевыми словами Python и вызовут NameError.

is_logged_in = True
has_error = False
is_adult = True

print(type(is_logged_in))   # <class 'bool'>
print(type(False))          # <class 'bool'>

Булевые значения часто возникают как результат сравнений. Мы детально разберём операторы сравнения в следующем модуле, но уже сейчас полезно знать, как они выглядят:

age = 20
print(age > 18)    # True
print(age == 18)   # False
print(age != 18)   # True
print(age < 10)    # False

Каждое из этих выражений вычисляется в True или False. Это и есть тип bool.

bool — это подтип int

Интересный факт: в Python bool является подтипом int. True числово равно 1, а False числово равно 0. Это позволяет применять к булевым значениям арифметику, хотя делают это редко:

print(True + True)    # 2
print(True + False)   # 1
print(False * 100)    # 0
print(int(True))      # 1
print(int(False))     # 0

На практике это бывает полезно: например, подсчёт количества True значений в списке через sum() (к спискам мы вернёмся в модуле 5).

Логические операторы: and, or, not

Python предоставляет три логических оператора для комбинирования булевых значений:

a = True
b = False

print(a and b)   # False — оба должны быть True
print(a or b)    # True — хотя бы один должен быть True
print(not a)     # False — инверсия: True → False
print(not b)     # True

Таблица истинности для and и or:

aba and ba or b
TrueTrueTrueTrue
TrueFalseFalseTrue
FalseTrueFalseTrue
FalseFalseFalseFalse

Мы подробнее разберём применение логических операторов в условных выражениях в модуле 3.

Приоритет логических операторов

Если в выражении есть несколько логических операторов, Python применяет их в порядке убывания приоритета: сначала not, потом and, затем or. Как и в арифметике, скобки позволяют явно задать порядок:

x = True
y = False
z = True

print(x or y and z)      # True: y and z = False, x or False = True
print((x or y) and z)    # True: x or y = True, True and z = True
print(not x or y)        # False: not x = False, False or y = False

Если сомневаетесь в приоритете — ставьте скобки.

Специальное значение None

None — это особое значение в Python, обозначающее отсутствие значения или «ничто». Оно имеет собственный тип NoneType и является единственным экземпляром этого типа:

result = None

print(result)           # None
print(type(result))     # <class 'NoneType'>

None используется в нескольких типичных ситуациях:

1. Начальное значение переменной, которая получит данные позже:

user_email = None
# ... позже в программе ...
# user_email = get_email_from_form()

2. Функция ничего не возвращает — в этом случае Python неявно возвращает None. Мы вернёмся к этому в модуле 8 при изучении функций.

3. Обозначение отсутствия данных — например, «поле не заполнено»:

middle_name = None   # у пользователя нет отчества

Проверка на None

Для проверки, является ли переменная None, рекомендуется использовать оператор is, а не ==:

value = None

# Правильно:
if value is None:
    print("Значение не задано")

# Тоже работает, но не по стилю Python:
if value == None:
    print("Значение не задано")

Оператор is проверяет идентичность объектов (это один и тот же объект в памяти), а == проверяет равенство значений. Поскольку None — единственный объект типа NoneType, is None надёжнее и идиоматичнее. Подробнее об операторах сравнения — в следующих модулях.

None — не то же самое, что False или 0

Распространённое заблуждение — считать None эквивалентным False или нулю. Это не так:

print(None == False)   # False
print(None == 0)       # False
print(None == "")      # False

# None — это просто "отсутствие значения", самостоятельная концепция

Тем не менее None считается «ложным» значением в булевом контексте — как и False, 0, пустая строка "". Это свойство мы подробно изучим в модуле 3.

Сводка: четыре базовых типа

К этому моменту вы знаете четыре базовых типа данных Python:

x = 42          # int — целое число
y = 3.14        # float — дробное число
s = "текст"     # str — строка
flag = True     # bool — логическое значение
nothing = None  # NoneType — отсутствие значения

Функция type() всегда поможет узнать тип конкретного значения. Это полезный инструмент при отладке — если программа ведёт себя неожиданно, проверьте тип переменной.

Проверь себя

Каков тип каждого из следующих значений?

a = 10 > 5
b = not True
c = None
  • abool (результат сравнения), значение True
  • bbool, значение False (инверсия True)
  • cNoneType, значение None

Итог

  • bool имеет два значения: True и False (с заглавной буквы).
  • bool — подтип int: True == 1, False == 0.
  • Логические операторы: and (И), or (ИЛИ), not (НЕ). Приоритет: not > and > or.
  • None означает «отсутствие значения»; его тип — NoneType.
  • Для проверки на None используйте is None, а не == None.
  • None — не False и не 0, хотя и является «ложным» в булевом контексте.

В следующем уроке разберём, как явно преобразовывать данные из одного типа в другой — функции int(), str(), float() и bool().

Попробуйте интерактивную версию

Практические задачи, квизы и AI-наставник — бесплатный старт без карты

Перейти к практике