Python es un lenguaje de tipado dinámico, esto quiere decir que una variable puede tomar valores de distintos tipos.
Ejemplo
a = 1
b = a + 3
a = "a"
Es conocido que Python durante el tiempo de ejecución no impone las anotaciones de tipado en funciones o variables. Sin embargo, puede ser utilizado por herramientas de terceros como validadores de tipado, IDEs (Entornos de Desarrollo Integrado), linters, entre otros.
El uso de type hints es como las pruebas unitarias, puede que para el desarrollador sea un esfuerzo extra y deba dedicar más tiempo, sin embargo, a largo plazo tiene sus ventajas.
Ventajas
Te permite ejecutar static checkers en tu código, mejora la legibilidad del mismo, al igual que te puede ayudar a entender más fácil las funciones (tipo de datos que se reciben en los parámetros y el tipo de retorno).
Ahora, si hay más personas aportando código en un proyecto, es fundamental poder entender de manera general y/o detallada lo que hace cada parte del mismo, entonces hacer uso de type hints es algo fundamental en proyectos grandes y pequeños.
Documentar el código se vuelve una tarea un poco más sencilla y la calidad de la documentación también mejora demasiado.
Ejemplo
a: int = 5
b: int = 3
c: int = a + b
En el ejemplo anterior tenemos la siguiente estructura al usar type hints con variables.
<nombre de la variable>: <tipo de dato> = <valor>
Pero también se puede hacer lo mismo con funciones o métodos.
Ejemplo
def hello_string(s: str) -> None:
print(f"Hello {s}")
El método anterior recibe como parámetro un string s
y no retorna ningún valor, es decir None
.
También se puede presentar que necesitamos que una función pueda retornar más de un tipo de dato o que un parámetro pueda ser de más de un tipo de dato, veámoslo en el siguiente ejemplo.
def hello_or_add(a: int | str) -> int | None:
if type(a) is int:
return a+1
else:
print(f"Hello {a}")
Para poder definir más de un tipo de dato es necesario separarlos entre sí con pipes |
, por todo lo demás sigue funcionando igual.
Top comments (2)
Genial este post, Robin!
Gracias!