Tipado en Python: Introducción

Tipado en Python: Introducción

Tabla de Contenido

Note

Este artículo hace parte de una serie que explicará el tipado en Python, a continuación puedes ver la recopilación de todos los posts de la serie.

Ver serie

¿Por qué es importante el tipado?

Antes de ahondar en el uso de tipos en python, debemos hacer un pequeño énfasis de porque nace la necesidad de implementar “tipado” y análisis estático de código en Python

Info

Escribo tipado entre comillas porque realmente no implementamos tipado en python, sino que simulamos tener tipos en Python, esto lo veremos vas adelante, pero es importante tenerlo en cuenta.

Python, al ser un lenguaje interpretado, significa que el código es leído y ejecutado solamente cuando el interprete pasa por la línea de código, por lo que el error, si existe, solo aparecerá cuando ejecutamos dicha línea de código. Por el contrario en un lenguaje compilado como Go o Java, el código debe primero construido (compilado) y después usado, pero es en el proceso de compilación en donde se realizan validaciones de tipos dentro del código y estas validaciones permiten capturar errores tempranos.

Tipos de errores

En este punto vale la pena agrupar los errores en dos grupos:

  • Errores de excepción: Son errores que se generan cuando un programa falla al ejecutar una acción determinada, como por ejemplo abrir un archivo que no existe.
  • Errores de lógica: Son errores que no generan excepción sino que generan un resultado errado al esperado.

Warning

Los errores de lógica son los mas peligrosos ya que al no levantar una excepción normalmente permiten que el flujo de trabajo continue con los errores.


En ese orden de ideas nos centraremos en los errores de lógica ya que son los errores que podemos “capturar” gracias a los tipos, por ejemplo con ayuda de tipos podemos capturar errores tempranos como:

  • validar el uso de los tipos de datos dentro de nuestro código, por ejemplo si estamos usando un string en un lugar donde deberíamos de usar un entero
  • validar que los métodos que estamos llamando existan en el objeto que estamos usando
  • validar que los atributos que estamos usando en un objeto existan
  • validar que los argumentos que estamos pasando a una función sean los correctos

Veamos la forma tradicional de validar y capturar errores de tipos en Python. Para ello debemos de implementar una serie sentencias en nuestro código para asegurarnos que estamos usando los tipos correctos. esto puede afectar la legibilidad del código y la productividad, e incluso el rendimiento de nuestros programas en algunos casos.

def clean_text(a):
    assert isinstance(a, str), "Input must be a string"
    # process a

def calculate_sum(*nums):
    sum = 0
    
    for num in nums:
        if not isinstance(num, (int, float)):
            raise ValueError("Input must be a number")
        
        sum += num
    
    return sum

En el caso de clean_text estamos validando que el argumento a sea un string, en caso de que no sea un string, levantamos una excepción. En el caso de calculate_sum estamos validando que los argumentos que estamos pasando sean int o float, en caso de que no sea alguno de estos, levantamos una excepción.

Info

En el caso clean_text estamos usando assert para validar el tipo de dato, sin embargo assert no es recomendado para validar tipos de datos, ya que se puede desactivar en tiempo de ejecución, por lo que no es una buena práctica usarlo como captura de errores en código, sin embargo es probable que lo encuentres en tu día a día como desarrollador.

Si miramos a profundidad el código no esta mal, sino que estamos agregando lógica adicional que esta afectando la legibilidad del código, y un de los principales objetivos que tenemos como programadores es escribir código limpio y legible. para los demás o tu yo del futuro. Imagina si hicieramos esto en códigos mas complejos y extensos.

Note

La siguiente entrega de esta seria aborda el tema de como implementar tipado en Python, y como podemos mejorar la legibilidad del código y la productividad. para verla da click en el siguiente botón.

Tipado básico en Python