Sugerencias de Tipo Prácticas
Combinando Funciones Lambda con Sugerencias de Tipo
Sugerencias de Tipo Básicas para Lambda
from typing import Callable
## Función lambda con sugerencia de tipo
multiplicar: Callable[[int, int], int] = lambda x, y: x * y
resultado = multiplicar(5, 3)
print(resultado) ## Salida: 15
Estrategias de Sugerencias de Tipo para Funciones Lambda
Anotaciones de Tipo Simples
## Lambda con sugerencias de tipo explícitas
procesar_numero: Callable[[float], float] = lambda x: x * 2.5
print(procesar_numero(4.0)) ## Salida: 10.0
Sugerencias de Tipo Complejas para Lambda
from typing import List, Callable
## Lambda con procesamiento de listas
filtrar_pares: Callable[[List[int]], List[int]] = lambda nums: list(filter(lambda x: x % 2 == 0, nums))
numeros = [1, 2, 3, 4, 5, 6]
print(filtrar_pares(numeros)) ## Salida: [2, 4, 6]
Flujo de Trabajo de Sugerencias de Tipo
graph TD
A[Función Lambda] --> B{Tipo de Anotación}
B --> C[Comprobación de Tipos Estáticos]
C --> D{¿Tipo Correcto?}
D -->|Sí| E[Ejecución del Código]
D -->|No| F[Error de Tipo]
Técnicas Avanzadas de Sugerencias de Tipo
Tipos Opcionales y de Unión
from typing import Optional, Union
## Lambda con tipos opcionales y de unión
dividir_seguro: Callable[[float, float], Optional[float]] = lambda x, y: x / y if y!= 0 else None
## Lambda con tipo de unión
procesar_valor: Callable[[Union[int, str]], str] = lambda x: str(x).upper()
Patrones Comunes y Errores Comunes
Patrón |
Descripción |
Mejor Práctica |
Transformación Simple |
Conversión de tipo de una línea |
Use sugerencias de tipo explícitas |
Lógica Compleja |
Operaciones múltiples |
Considere funciones con nombre |
Manejo de Errores |
Procesamiento condicional |
Agregue comprobaciones seguras de tipo |
Consideraciones de Rendimiento
from typing import Callable
import timeit
## Comparando el rendimiento de lambda tipadas y no tipadas
lambda_tipada: Callable[[int], int] = lambda x: x * 2
lambda_no_tipada = lambda x: x * 2
## Comparación de tiempos
tiempo_tipado = timeit.timeit(lambda: lambda_tipada(10), number=100000)
tiempo_no_tipado = timeit.timeit(lambda: lambda_no_tipada(10), number=100000)
Mejores Prácticas para Sugerencias de Tipo en Lambda
- Use
Callable
para sugerencias de tipo de función
- Especifique los tipos de entrada y salida
- Mantenga las funciones lambda simples
- Use verificadores de tipo como mypy
Ejemplo en el Mundo Real
from typing import List, Callable
def aplicar_transformación(
datos: List[int],
transformador: Callable[[int], int]
) -> List[int]:
return list(map(transformador, datos))
## Uso de lambda con sugerencia de tipo
al_cuadrado: Callable[[int], int] = lambda x: x ** 2
numeros = [1, 2, 3, 4, 5]
resultado = aplicar_transformación(numeros, al_cuadrado)
print(resultado) ## Salida: [1, 4, 9, 16, 25]
En LabEx, enfatizamos la importancia de código claro y con sugerencias de tipo para una mejor mantenibilidad y legibilidad.