El `truthy` y `falsy` de Python

El `truthy` y `falsy` de Python

Este artículo explica el truthy y falsy de Python.

YouTube Video

El truthy y falsy de Python

Definición de truthy y falsy

En Python, los objetos evaluados en expresiones condicionales se consideran 'True' o 'False'. Truthy se refiere a objetos evaluados como 'True', y falsy se refiere a aquellos evaluados como 'False'. Estas evaluaciones se utilizan frecuentemente en ramas condicionales como declaraciones if o bucles while. Además, la función bool() acepta cualquier objeto y devuelve su valor booleano.

Falsy (Objetos evaluados como False)

En Python, los siguientes objetos se consideran falsy:.

  • Falso

  • Nulo

  • Valores numéricos de cero

    • Ejemplo: 0, 0.0
  • Tipos de secuencias vacías (como listas, tuplas o cadenas vacías)

    • Ejemplo: [], (), ""
  • Diccionario vacío

    • Ejemplo: {}
  • Conjunto vacío

    • Ejemplo: set()

Estos objetos se evalúan como 'falsy' cuando se usan en la condición de una declaración if. Por ejemplo, puedes escribir código como este.

1if not []:
2    print("The list is falsy.")
  • En este código, la lista [] está vacía, por lo tanto se evalúa como falsy, y se ejecuta la declaración print.

Truthy (Objetos evaluados como True)

Los objetos que no se consideran falsy se consideran truthy.

  • Números no nulos (enteros, números de punto flotante)

    • Ejemplos: 1, 3.14, -100
  • Tipos de secuencias no vacías (listas, tuplas, cadenas, etc.)

    • Ejemplos: [1, 2, 3], (1, 2), "Hello"
  • Diccionarios no vacíos

    • Ejemplo: {"key": "value"}
  • Conjuntos no vacíos

    • Ejemplo: {1, 2, 3}

Los objetos considerados truthy se evaluarán como 'True' cuando se usen en la condición de una sentencia if. Por ejemplo, puedes escribir código como este.

1if [1, 2, 3]:
2    print("The list is truthy.")
  • En el código anterior, como la lista [1, 2, 3] no está vacía, se evalúa como truthy y se ejecuta la sentencia print.

Evaluar el valor booleano con la función bool()

Puedes evaluar el valor booleano de los objetos usando la función bool().

 1# Examples of falsy values
 2print("False is", "truthy" if bool(False) else "falsy")
 3print("0 is", "truthy" if bool(0) else "falsy")
 4print('"" is', "truthy" if bool("") else "falsy")
 5print("None is", "truthy" if bool(None) else "falsy")
 6print("[] is", "truthy" if bool([]) else "falsy")
 7
 8# Examples of truthy values
 9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
  • Este código demuestra cómo se evalúa el valor de verdad de varios valores. Por ejemplo, el valor numérico 0 y una cadena vacía se consideran False, mientras que un espacio o la cadena "0" se consideran True.

Utilizando truthy y falsy

Al utilizar truthy y falsy, el código se puede escribir de forma más concisa e intuitiva. En particular, las declaraciones if a menudo pueden evaluarse sin comparaciones explícitas para hacerlas más cortas. Por ejemplo, los siguientes dos fragmentos de código se comportan de manera similar, pero el primero es más conciso.

1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5    print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9    print("The list is not empty.")

En el ejemplo anterior, puedes ver que my_list se evalúa como truthy siempre que no sea una lista vacía, lo que elimina la necesidad de una comparación explícita.

Diseñar con truthy y falsy

Al utilizar eficazmente los conceptos de truthy y falsy, puedes mejorar la legibilidad y eficiencia del código. Son particularmente útiles para establecer valores predeterminados, verificar la validez de variables y la validación de entradas. Por ejemplo, si esperas que se pasen None o una lista vacía como argumentos, puedes escribir código como este.

1def process_data(data=None):
2    data = data or []
3    print(data)
4
5process_data()  # An empty list is used by default.
  • En este código, si data es None, una lista vacía [] se establece como valor predeterminado. De esta manera, el uso de truthy y falsy te permite establecer valores predeterminados de forma concisa.

Puntos a tener en cuenta para evitar comportamientos no deseados

Sin embargo, aunque el código que usa valores truthy y falsy puede ser conciso y conveniente, hay que tener en cuenta que puede causar comportamientos no deseados. Por ejemplo, en este código, no solo cuando data es None, sino también cuando es cualquier valor evaluado como False, como una cadena vacía o 0, será reemplazado por la lista vacía predeterminada []. Por esta razón, cuando se requiere una condición más estricta, como inicializar solo cuando el valor es None, se recomienda usar una condición explícita como value is None:. Dependiendo de la situación, es importante diseñar teniendo en cuenta un equilibrio entre la concisión y el rigor.

1def process_data(data=None):
2    if data is None:
3        data = []
4    print(data)
5
6process_data()   # An empty list is used by default.
7process_data(0)  # 0 is printed because it's not None.
  • En este código, data se inicializa como una lista vacía solo si es None, mientras que otros valores falsos como 0 se dejan tal como están.

Controlar el valor booleano en objetos personalizados

Incluso en tus propias clases, puedes controlar el valor booleano de una instancia definiendo __bool__() o __len__().

 1class MyContainer:
 2    def __init__(self, items):
 3        self.items = items
 4
 5    def __len__(self):
 6        return len(self.items)
 7
 8box = MyContainer([])
 9print(bool(box))  # False
10
11box.items.append("item")
12print(bool(box))  # True
  • En este código, el método __len__() hace que el contenedor se evalúe como False cuando está vacío y como True cuando tiene elementos.

Conclusión

Los conceptos de truthy y falsy en Python son muy importantes para escribir expresiones condicionales concisas y hacer el código más intuitivo. Comprender y utilizar correctamente estos conceptos puede mejorar significativamente la legibilidad y eficiencia del código.

Puedes seguir el artículo anterior utilizando Visual Studio Code en nuestro canal de YouTube. Por favor, también revisa nuestro canal de YouTube.

YouTube Video