2.17. Anotaciones de tipo

Python te permite anotar los parámetros de una función y sus valores de retorno con información de tipo. Las anotaciones se ignoran en tiempo de ejecución (nada las comprueba, nada se convierte en función de ellas), pero sirven como documentación para los lectores y para el IDE.

2.17.1. Sintaxis de las anotaciones

Una anotación de parámetro va después de dos puntos. El tipo de retorno va después de -> y antes de los dos puntos del cuerpo:

def greet(name: str) -> None:
    print("hello,", name)

def add(a: int, b: int) -> int:
    return a + b

def average(values: list) -> float:
    return sum(values) / len(values)

Las anotaciones describen lo que debería pasarse y lo que se devolverá. Llamar a add("hi", "there") no lanza un error: Python ejecuta el cuerpo de todos modos. Las anotaciones son un contrato, no una comprobación.

Un parámetro puede tener tanto un valor por defecto como una anotación:

def greet(name: str, greeting: str = "hello") -> None:
    print(greeting, name)

CPython tiene una notación más rica (Optional, Union, genéricos) a través del módulo typing, pero estos son pesados en MicroPython y rara vez se necesitan para el código cotidiano de la cámara.

2.17.2. MicroPython en tiempo de ejecución

MicroPython analiza las anotaciones y luego las ignora. No hay un módulo typing que importar en la cámara; intentar usar Optional[int] o list[int] o bien fallará al importar o bien se comportará silenciosamente como un simple acceso a atributos, según la compilación del firmware.

Limítate a nombres de tipo simples (int, float, str, bool, bytes, list, tuple, dict) en las anotaciones. No cuestan nada en tiempo de ejecución y transmiten la intención con claridad.

2.17.3. Cómo las usa el IDE

El IDE lee las anotaciones para impulsar los tooltips, el autocompletado y las sugerencias en línea. Una función anotada con -> int muestra int como su tipo de retorno cuando el cursor pasa sobre la llamada. Un parámetro anotado con : str autocompleta los métodos de cadena sobre el argumento dentro del cuerpo de la función.

Esta es la recompensa práctica de escribir anotaciones en un entorno de ejecución que las ignora: mejor soporte del editor sin ningún coste cuando el script se ejecuta en la cámara.

2.17.4. Anotaciones de variables

Las anotaciones en asignaciones simples funcionan de la misma manera:

threshold: float = 0.5
name: str = "OpenMV"

Estas también se ignoran en tiempo de ejecución. Su uso principal es hacer obvio el tipo previsto cuando el lado derecho no lo deja claro, normalmente cuando el valor inicial es un marcador de posición que se reemplazará más adelante.