Логический тип 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:
a | b | a and b | a or b |
|---|---|---|---|
True | True | True | True |
True | False | False | True |
False | True | False | True |
False | False | False | False |
Мы подробнее разберём применение логических операторов в условных выражениях в модуле 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
a→bool(результат сравнения), значениеTrueb→bool, значениеFalse(инверсияTrue)c→NoneType, значение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().