Логический тип данных (bool) в Python
Логический тип данных (bool или булевый тип) — это примитивный тип данных, который принимает 2 значения — истина или ложь.
В Python имеется самостоятельный логический тип bool
, с двумя предопределенными значениями:
True
— истина;False
— ложь.
True и False пишутся с большой буквы. Если написать с маленькой true или false, интерпретатор выдаст ошибку: NameError: name 'true' is not defined
True и False являются экземплярами класса bool
который в свою очередь является подклассом int
Поэтому True и False в Python ведут себя как числа 1 и 0. Отличие только в том, как они выводятся на экран.
>>> True
True
>>> type(True)
<class 'bool'>
>>> isinstance(True, int)
True
>>> True == 1
True
>>> True + 4 # True это число 1
5
>>> 5 * False # False это число 0
0
Часто логический тип данных используется в ветвлениях if
. Если результат выполнения True
— выполняется соответствующая ветка.
>>> a = 10
>>> if a < 0:
print("меньше 0")
elif a == 0:
print("равно 0")
else:
print("больше 0")
больше 0
Цикл while
работает аналогичным образом — цикл выполняется до тех пор, пока логическое выражение True
.
>>> count = 5
>>> while count:
print("count = {}".format(count))
count -= 1
count = 5
count = 4
count = 3
count = 2
count = 1
Преобразования
Другие типы → bool
В Python для приведения других типов данных к булевому типу, используется функция bool()
Работает эта функция по следующему соглашению:
👉 Функция bool()
вернет True:
- непустая строка (в том числе если это один или несколько пробелов);
- ненулевое число (в том числе меньшее единицы, например -5);
- непустой список/кортеж (даже если он содержит один пустой элемент, например пустой кортеж);
- функция.
>>> bool("python")
True
>>> bool(" ")
True
>>> bool(1)
True
>>> bool(-5)
True
>>> bool([1,2,3])
True
>>> bool((0,1))
True
>>> bool([()])
True
>>> def test():
return "test"
>>> bool(test)
True
👉 Функция bool()
вернет False:
- пустая строка;
- нулевое число;
- пустой список/кортеж.
>>> bool("")
False
>>> bool(0)
False
>>> bool([])
False
>>> bool(())
False
bool → str
Бывают ситуации, когда нам необходимо получить True и False в строковом представлении. Если выполнить код ниже, он вызовет ошибку:
print("answer is " + True)
TypeError: can only concatenate str (not "bool") to str
Ошибка произошла потому, что Python не выполняет неявное приведение типов (как например JavaScript), так как неявное приведение может маскировать логические ошибки.
Для вывода на экран булевого значения, необходимо привести его к строке:
>>> answer = True
>>> print("my answer is " + str(True))
my answer is True
или используйте форматирование строки:
print("my answer is {}".format(True))
bool → int
Встроенная функция int()
преобразует логическое значение в 1 или 0.
>>> int(True)
1
>>> int(False)
0
Аналогичного результата можно добиться умножением логического типа на единицу:
>>> True * 1
1
>>> False * 1
0
Логический тип и операторы
Операторы — это своего рода функционал, представленный в виде символов (например + ==) или зарезервированных слов (например and not).
В Python используется несколько типов операторов. Мы же рассмотрим только операторы сравнения и логические операторы, т.к. результатом их выполнения являются True
или False
.
Операторы сравнения:
>>> 1 == 5
False
>>> 1 != 5
True
>>> 1 > 5
False
>>> 1 < 5
True
>>> 1 >= 5
False
>>> 1 <= 5
True
Логические операторы:
>>> (1 + 1 == 2) or (2 * 2 == 5)
True
>>> (1 + 1 == 2) and (2 * 2 == 5)
False
>>> (1 + 1 == 2) and not (2 * 2 == 5)
True
Приведенные примеры по сути не разбираются, не объясняется каждая строчка. Поверхностное объяснение, для галочки, типа тему же затронули ...
Для собеса не хватит. Затронуты только верха. Не разобран тип на более низких уровнях.
def test(): return 0 print(test) # >>> <function test at 0x7f426d6b1800> print(test()) # >>> 0 print(bool(test)) # >>> True print(bool(test())) # >>> False