У Python значення правди й неправди мають тип bool, який є підкласом int.
У цьому типі лише два булеві значення (англ. Boolean): True і False.
Ці значення можна присвоїти змінній і поєднувати за допомогою булевих операторів (and, or, not):
>>> true_variable = True and True
>>> false_variable = True and False
>>> true_variable = False or True
>>> false_variable = False or False
>>> true_variable = not False
>>> false_variable = not True
Булеві оператори використовують скорочене обчислення: вираз праворуч від оператора обчислюється лише тоді, коли це потрібно.
Кожен з операторів має свій пріоритет: not обчислюється перед and та or.
Дужки дають змогу обчислити одну частину виразу перед іншими:
>>> not True and True
False
>>> not (True and False)
True
Усі boolean operators мають нижчий пріоритет, ніж comparison operators у Python, як-от ==, >, <, is та is not.
Функція bool (bool()) перетворює будь-який обʼєкт на булеве значення.
Типово всі обʼєкти повертають True, якщо для них не визначено повертати False.
Кілька built-ins за визначенням завжди вважаються False:
None і False
int, float, complex, decimal або fraction)str, list, set, tuple, dict, range(0))>>> bool(None)
False
>>> bool(1)
True
>>> bool(0)
False
>>> bool([1,2,3])
True
>>> bool([])
False
>>> bool({"Pig" : 1, "Cow": 3})
True
>>> bool({})
False
Коли обʼєкт використовується в булевому контексті, він прозоро оцінюється як правдивий чи неправдивий за допомогою bool():
>>> a = "is this true?"
>>> b = []
# This will print "True", as a non-empty string is considered a "truthy" value
>>> if a:
... print("True")
# This will print "False", as an empty list is considered a "falsey" value
>>> if not b:
... print("False")
Класи можуть визначати, як їх оцінюють у ситуаціях правдивості, якщо вони перевизначають і реалізують метод __bool__() та/або метод __len__().
Тип bool реалізовано як підтип int.
Це означає, що True чисельно дорівнює 1, а False чисельно дорівнює 0.
Це видно, коли порівнювати їх за допомогою оператора рівності:
>>> 1 == True
True
>>> 0 == False
True
Однак bools усе ще відрізняються від ints, що видно при порівнянні їх за допомогою оператора ідентичності is:
>>> 1 is True
False
>>> 0 is False
False
Примітка: у Python >= 3.8 використання літерала (як-от
1,'',[]чи{}) ліворуч відisспричинить попередження.
Порівнювати булеву змінну з True або False за допомогою оператора рівності вважається антипатерном у Python.
Натомість варто використовувати оператор ідентичності is:
>>> flag = True
# Not "Pythonic"
>>> if flag == True:
... print("This works, but it's not considered Pythonic.")
# A better way
>>> if flag:
... print("Pythonistas prefer this pattern as more Pythonic.")