Saltar al contenido principal
eLearner.app
Módulo 9 · Lección 1 de 433/36 en el curso~12 min
Lecciones del módulo (1/4)

Type hints: anotar tipos

Las indicaciones de tipo o type hints (anotaciones de tipo) son declaraciones opcionales que indican que "esta variable/parámetro tiene el tipo X". Python NO las verifica en tiempo de ejecución: son para ti, tu editor (¡autocompletado!) y herramientas como mypy o pyright que realizan una comprobación estática de tipos.

Anotar variables

Python
nome: str = "Ada"
anni: int = 36
attivo: bool = True
prezzi: list[float] = [1.2, 3.4]

La sintaxis es nombre: tipo = valor. Sin un valor, es una declaración pura:

Python
risultato: int  # nessuna assegnazione, solo "annuncio del tipo"

Anotar funciones

Python
def saluta(nome: str, urlante: bool = False) -> str:
    s = f"Ciao {nome}"
    return s.upper() if urlante else s

def somma(numeri: list[int]) -> int:
    return sum(numeri)

Sintaxis: param: tipo para cada parámetro, -> tipo para el retorno. Una función que no devuelve nada usa -> None.

Tipos genéricos integrados (Python 3.9+)

Python
nomi: list[str] = ["a", "b"]
mappa: dict[str, int] = {"x": 1}
coppia: tuple[int, str] = (1, "ok")
unici: set[int] = {1, 2, 3}

Optional y Union

Un valor que puede ser None:

Python
def trova_utente(id: int) -> str | None:
    if id == 1:
        return "Ada"
    return None

X | None es la sintaxis moderna (Python 3.10+). Equivalente: Optional[X] de typing. Para uniones de múltiples tipos: int | str | float.

typing: herramientas útiles

Python
from typing import Any, Callable

def applica(f: Callable[[int], int], x: int) -> int:
    return f(x)

valore: Any = "qualunque cosa"  # disabilita il check
  • Any = "no comprobar" (usar con moderación).
  • Callable[[arg1, arg2], retorno] = una función que toma esos parámetros y devuelve ese tipo.

mypy: el comprobador de tipos

Instalas mypy, ejecutas mypy archivo.py y te dice si los tipos coinciden:

Bash
$ mypy script.py
script.py:5: error: Argument 1 to "somma" has incompatible type "str"; expected "int"

Comprobación de tipos con mypy

El intérprete de Python no impone las indicaciones de tipo en tiempo de ejecución; se ignoran durante la ejecución. Para validar la corrección de los tipos, debes ejecutar una herramienta externa de análisis estático como mypy ejecutando el comando mypy script.py en tu terminal.

Pruébalo tú

Ejercicio#python.m9.l1.e1
Intentos: 0Cargando...

Define una función `double(numbers: list[int]) -> list[int]` que devuelva una lista con cada elemento multiplicado por 2. Llámala con [1, 2, 3] y asígnala a `r`. Evalúa `r`.

Cargando editor...
Mostrar pista

Usa una comprensión de lista o un bucle for.

Solución disponible después de 3 intentos

Ejercicio de repaso

Ejercicio#python.m9.l1.e2
Intentos: 0Cargando...

Define `first_or_none(items: list[int]) -> int | None` que devuelva el primer elemento si la lista no está vacía, de lo contrario None. Asigna `a = first_or_none([10, 20])` y `b = first_or_none([])`. Evalúa `(a, b)`.

Cargando editor...
Mostrar pista

`if items` es verdadero cuando la lista NO está vacía.

Solución disponible después de 3 intentos

Desafío adicional

Ejercicio#python.m9.l1.e3
Intentos: 0Cargando...

Escribe una función `double_value(n: int) -> int` que tome un entero, lo multiplique por 2 y devuelva el resultado. Asegúrate de especificar las indicaciones de tipo tanto para el parámetro como para el valor de retorno. Finalmente, evalúa `double_value(5)`.

Cargando editor...
Mostrar pista

Usa n: int como parámetro y -> int después de la firma de la función.

Solución disponible después de 3 intentos