Las anotaciones de tipo permiten indicar el tipo esperado de los parámetros de entrada y del valor de retorno de una función. Aunque Python no obliga a seguir estas anotaciones, su uso mejora la legibilidad del código y facilita la detección de errores con herramientas externas.
Las anotaciones son una característica del lenguaje que permite agregar metadatos (información adicional) a los parámetros y al valor de retorno de una función.
No cambian cómo se ejecuta la función. Solo sirven para describir o documentar lo que se espera que reciba y retorne. Estas anotaciones pueden ser usadas por herramientas externas (como editores o analizadores de tipo), pero Python en sí no las aplica ni verifica automáticamente.
def suma(a: int, b: int) -> int:
return a + b
int).int).A pesar de estas anotaciones, Python no verifica los tipos en tiempo de ejecución:
print(suma("hola", "mundo")) # Resultado: "holamundo"
Esto ocurre porque Python utiliza tipado dinámico y sigue el principio de duck typing ("si camina como un pato...").
Podemos ver las anotaciones de una función con el atributo especial
__annotations__:
def saludar(nombre: str) -> None:
print(f"Hola, {nombre}")
print(saludar.__annotations__)
También es posible combinar las anotaciones con valores por defecto:
def agregar_elemento(lista: list[str] = []) -> list[str]:
lista.append("elemento")
return lista
No se recomienda usar listas mutables como valor por
defecto. En su lugar, se puede usar None y crear la lista dentro de la
función.
Para reforzar las anotaciones, podemos usar herramientas de
verificación estática de tipos como mypy. Esta herramienta
analiza el código sin ejecutarlo y detecta incoherencias de tipo.
pip install mypy
def resta(a: int, b: int) -> int:
return a - b
print(resta(10, 3)) # Correcto
print(resta("hola", 5)) # Error detectado por mypy
mypy archivo.py
| Tipo | Significado |
|---|---|
| int | Número entero |
| float | Número decimal |
| str | Cadena de texto |
| bool | Booleano (True o False) |
| list[int] | Lista de enteros |
| dict[str, int] | Diccionario de cadenas a enteros |
Para usar tipos más avanzados (como listas tipadas), se
recomienda importar los tipos desde el módulo typing:
from typing import List, Dict
Aunque no son obligatorias, las anotaciones: