Python representa los valores verdadero y falso con el tipo bool, que es una subclase de int. En este tipo solo hay dos valores Boolean: True y False. Estos valores se pueden asignar a una variable y combinar con los operadores Boolean (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
Los operadores Boolean usan la evaluación de cortocircuito, lo que significa que la expresión del lado derecho del operador solo se evalúa si es necesario.
Cada uno de los operadores tiene una precedencia diferente: not se evalúa antes que and y or. Se pueden usar paréntesis para evaluar una parte de la expresión antes que las demás:
>>> not True and True
False
>>> not (True and False)
True
Todos los boolean operators se consideran de menor precedencia que los comparison operators de Python, como ==, >, <, is e is not.
La función bool (bool()) convierte cualquier objeto en un valor Boolean. De forma predeterminada, todos los objetos devuelven True a menos que estén definidos para devolver False.
Algunos built-ins siempre se consideran False por definición:
None y False
int, float, complex, decimal o 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
Cuando un objeto se usa en un contexto Boolean, se evalúa de forma transparente como truthy o falsey usando 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")
Las clases pueden definir cómo se evalúan en situaciones truthy si sobrescriben e implementan un método __bool__() y/o un método __len__().
El tipo bool está implementado como un subtipo de int. Eso significa que True es numéricamente igual a 1 y que False es numéricamente igual a 0. Esto se puede observar al compararlos con un operador de igualdad:
>>> 1 == True
True
>>> 0 == False
True
Sin embargo, los bools siguen siendo diferentes de los ints, como se nota al compararlos con el operador de identidad, is:
>>> 1 is True
False
>>> 0 is False
False
Nota: en Python >= 3.8, usar un literal (como
1,'',[]o{}) al lado izquierdo deislanzará una advertencia.
Se considera un antipatrón de Python usar el operador de igualdad para comparar una variable Boolean con True o False. En su lugar, se debe usar el operador de identidad 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.")