Valores de verdad y falsedad en Python: una introducción detallada

Bienvenidos

En este artículo, aprenderá:

  • Qué son los valores verdaderos y falsos.
  • Qué hace que un valor sea verdadero o falso.
  • Cómo utilizar la bool()función para determinar si un valor es verdadero o falso.
  • Cómo hacer que los objetos de las clases definidas por el usuario sean verdaderos o falsos usando el método especial __bool __.

¡Vamos a empezar! ✨

? Valores de verdad versus valores de verdad y falsedad

Permítanme presentarles estos conceptos comparándolos con los valores Truey con los Falseque normalmente trabajamos.

Las expresiones con operandos y operadores se evalúan como Trueo Falsey pueden usarse en una condición ifo whilepara determinar si se debe ejecutar un bloque de código.

Aquí tenemos un ejemplo:

# Expression 5 >> if 5 < 3: print("True") else: print("False") # Output False

En este ejemplo, todo funciona como esperábamos porque usamos una expresión con dos operandos y un operador 5 < 3.

Pero, ¿qué crees que pasará si intentamos ejecutar este código?

>>> a = 5 >>> if a: print(a)

Observe que ahora no tenemos una expresión típica al lado de la ifpalabra clave, solo una variable:

Sorprendentemente, el resultado es:

5

Si cambiamos el valor de aa cero, así:

>>> a = 0 >>> if a: print(a)

No hay salida.

Estoy seguro de que debes preguntarte esto en este momento: ¿qué hizo que el código se ejecutara correctamente?

La variable ano es una expresión típica. No tiene operadores ni operandos, entonces, ¿por qué se evaluó Trueo en Falsefunción de su valor?

La respuesta está en el concepto de los valores de Verdad y Falsedad, que no son valores de verdad en sí mismos, pero evalúan como Trueo False.

?Valores de verdad y falsedad

En Python, los valores individuales pueden evaluarse como Trueo False. No necesariamente tienen que ser parte de una expresión más grande para evaluar un valor de verdad porque ya tienen una que ha sido determinada por las reglas del lenguaje Python.

Las reglas básicas son:

  • FalseSe consideran los valores que evalúan a Falsy.
  • TrueSe consideran los valores que evalúan a Truthy.

Según la documentación de Python:

Cualquier objeto puede ser probado por valor de verdad, para uso en un ifo whilecondición o como operando de las operaciones booleanas de abajo (y, o, no).

? Contexto booleano

Cuando usamos un valor como parte de una expresión más grande, o como una condición ifo while, lo estamos usando en un contexto booleano .

Puede pensar en un contexto booleano como una "parte" particular de su código que requiere que un valor sea Trueo Falsetenga sentido.

Por ejemplo, (ver más abajo) la condición después de la ifpalabra clave o después de la whilepalabra clave tiene que evaluarse como Trueo False:

? Consejo: el valor se puede almacenar en una variable. Podemos escribir el nombre de la variable después de la palabra clave ifo en whilelugar del valor en sí. Esto proporcionará la misma funcionalidad.

Ahora que sabe qué son los valores verdaderos y falsos y cómo funcionan en un contexto booleano, veamos algunos ejemplos reales de valores verdaderos y falsos.

? Valores de falsedad

Secuencias y colecciones:

  • Listas vacías []
  • Tuplas vacías ()
  • Diccionarios vacíos {}
  • Conjuntos vacíos set()
  • Cadenas vacías ""
  • Rangos vacíos range(0)

Números

  • Cero de cualquier tipo numérico.
  • Entero: 0
  • Flotador: 0.0
  • Complejo: 0j

Constantes

  • None
  • False

Los valores falsos fueron la razón por la que no hubo salida en nuestro ejemplo inicial cuando el valor de aera cero.

El valor 0es falso, por lo que la ifcondición será Falsey el condicional no se ejecutará en este ejemplo:

>>> a = 0 >>> if a: print(a) # No Output 

? Valores de verdad

Según la documentación de Python:

De forma predeterminada, un objeto se considera verdadero .

Los valores de verdad incluyen:

  • Secuencias o colecciones no vacías (listas, tuplas, cadenas, diccionarios, conjuntos).
  • Valores numéricos que no son cero.
  • True

Es por eso que el valor de ase imprimió en nuestro ejemplo inicial porque su valor era 5 (un valor de verdad):

>>> a = 5 >>> if a: print(a) # Output 5

? La función incorporada bool ()

Puede verificar si un valor es verdadero o falso con la bool()función incorporada.

Según la documentación de Python, esta función:

Devuelve un valor booleano, es decir, uno de Trueo False. x (el argumento) se convierte utilizando el procedimiento estándar de prueba de verdad.

Solo necesita pasar el valor como argumento, así:

>>> bool(5) True >>> bool(0) False >>> bool([]) False >>> bool({5, 5}) True >>> bool(-5) True >>> bool(0.0) False >>> bool(None) False >>> bool(1) True >>> bool(range(0)) False >>> bool(set()) False >>> bool({5, 6, 2, 5}) True

? Sugerencia: también puede pasar una variable como argumento para probar si su valor es verdadero o falso.

? Ejemplos reales

One of the advantages of using truthy and falsy values is that they can help you make your code more concise and readable. Here we have two real examples.

Example:

We have this function print_even() that takes as an argument a list or tuple that contains numbers and only prints the values that are even. If the argument is empty, it prints a descriptive message:

def print_even(data): if len(data) > 0: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Notice this line:

if len(data) > 0:

We can make the condition much more concise with truthy and falsy values:

if data:

If the list is empty, data will evaluate to False. If it's not empty, it will evaluate to True. We get the same functionality with more concise code.

This would be our final function:

def print_even(data): if data: for value in data: if value % 2 == 0: print(value) else: print("The argument cannot be empty")

Example:

We could also use truthy and falsy values to raise an exception (error) when the argument passed to a function is not valid.

>>> def print_even(data): if not data: raise ValueError("The argument data cannot be empty") for value in data: if value % 2 == 0: print(value)

In this case, by using not data as the condition of the if statement, we are getting the opposite truth value of data for the if condition.

Let's analyze not data in more detail:

If data is empty:

  • It will be a falsy value, so data will evaluate to False.
  • not data will be equivalent to not False, which is True.
  • The condition will be True.
  • The exception will be raised.

If data is not empty:

  • It will be a truthy value, so it will evaluate to True.
  • not data will be equivalent to not True, which is False .
  • The condition will be False.
  • The exception will not be raised.

? Making Custom Objects Truthy and Falsy Values

Si está familiarizado con las clases y la programación orientada a objetos, puede agregar un método especial a sus clases para que sus objetos actúen como valores verdaderos y falsos.

__bool __ ()

Con el método especial __bool__(), puede establecer una condición "personalizada" que determinará cuándo un objeto de su clase se evaluará como Trueo False.

Según la documentación de Python:

De forma predeterminada, un objeto se considera verdadero a menos que su clase defina un __bool__()método que devuelve Falseo un __len__()método que devuelve cero, cuando se llama con el objeto.

Por ejemplo, si tenemos esta clase muy simple:

>>> class Account: def __init__(self, balance): self.balance = balance

Puede ver que no se definen métodos especiales, por lo que todos los objetos que cree a partir de esta clase siempre se evaluarán en True:

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) True

We can customize this behavior by adding the special method __bool__():

>>> class Account: def __init__(self, balance): self.balance = balance def __bool__(self): return self.balance > 0

Now, if the account balance is greater than zero, the object will evaluate to True. Otherwise, if the account balance is zero, the object will evaluate to False.

>>> account1 = Account(500) >>> bool(account1) True >>> account2 = Account(0) >>> bool(account2) False

? Tip: If __bool__() is not defined in the class but the __len__() method is, the value returned by this method will determine if the object is truthy or falsy.

? In Summary

  • Truthy values are values that evaluate to True in a boolean context.
  • Falsy values are values that evaluate to False in a boolean context.
  • Falsy values include empty sequences (lists, tuples, strings, dictionaries, sets), zero in every numeric type, None, and False.
  • Truthy values include non-empty sequences, numbers (except 0 in every numeric type), and basically every value that is not falsy.
  • They can be used to make your code more concise.

I really hope you liked my article and found it helpful. Now you can work with truthy and falsy values in your Python projects. Check out my online courses. Follow me on Twitter. ⭐️