Ejemplos Prácticos de Funciones Lambda
Escenarios de Anotación de Tipo para Funciones Lambda en el Mundo Real
from typing import List, Callable
def transformar_datos(
datos: List[int],
transformador: Callable[[int], float]
) -> List[float]:
return list(map(transformador, datos))
## Función lambda con sugerencias de tipo para escalado de datos
escalar_datos = lambda x: int -> float: x * 1.5
numeros = [1, 2, 3, 4, 5]
numeros_escalados = transformar_datos(numeros, escalar_datos)
Filtrado y Validación
from typing import List, Callable, Optional
def filtrar_datos(
elementos: List[int],
condicion: Callable[[int], bool]
) -> List[int]:
return list(filter(condicion, elementos))
## Función lambda para filtrar números pares
es_par = lambda x: int -> bool: x % 2 == 0
numeros = [1, 2, 3, 4, 5, 6]
numeros_pares = filtrar_datos(numeros, es_par)
Ordenamiento con Comparadores Personalizados
from typing import List, Tuple, Callable
def ordenamiento_custom(
datos: List[Tuple[str, int]],
key_func: Callable[[Tuple[str, int]], int]
) -> List[Tuple[str, int]]:
return sorted(datos, key=key_func)
## Función lambda para ordenar por el segundo elemento
ordenar_por_edad = lambda x: Tuple[str, int] -> int: x[1]
personas = [('Alice', 30), ('Bob', 25), ('Charlie', 35)]
personas_ordenadas = ordenamiento_custom(personas, ordenar_por_edad)
Patrones de Anotación de Tipo para Funciones Lambda
Patrón |
Caso de Uso |
Ejemplo |
Transformación Simple |
Conversión de datos |
lambda x: int -> float |
Filtrado |
Verificación de condición |
lambda x: int -> bool |
Clave de Ordenamiento |
Comparación personalizada |
lambda x: Tuple[str, int] -> int |
Validación |
Verificación de entrada |
lambda x: str -> bool |
Manejo de Errores con Sugerencias de Tipo
from typing import Optional, Callable
def division_segura(
a: float,
b: float,
manejador_error: Optional[Callable[[Exception], float]] = None
) -> float:
try:
return a / b
except ZeroDivisionError as e:
if manejador_error:
return manejador_error(e)
raise
## Manejador de errores lambda
error_predeterminado = lambda e: Exception -> float: 0.0
resultado = division_segura(10, 0, error_predeterminado)
Composición de Funciones Lambda
from typing import Callable, TypeVar
T = TypeVar('T')
U = TypeVar('U')
V = TypeVar('V')
def componer(
f: Callable[[U], V],
g: Callable[[T], U]
) -> Callable[[T], V]:
return lambda x: T -> V: f(g(x))
## Ejemplo de composición de funciones
doblar = lambda x: int -> int: x * 2
incrementar = lambda x: int -> int: x + 1
doblar_luego_incrementar = componer(incrementar, doblar)
Flujo de Verificación de Tipo para Funciones Lambda
graph TD
A[Definición de Función Lambda] --> B[Anotación de Tipo]
B --> C{Verificador de Tipo}
C --> |Validar Tipos| D[Comprobación en Tiempo de Compilación]
D --> E[Ejecución en Tiempo de Ejecución]
C --> |Desajuste de Tipos| F[Levantar Error de Tipo]
Mejores Prácticas para Anotaciones de Tipo de Funciones Lambda
- Mantenga las funciones lambda simples y centradas
- Utilice sugerencias de tipo claras y precisas
- Prefiera funciones con nombre para la lógica compleja
- Aproveche verificadores de tipo como mypy
Al aplicar estos ejemplos prácticos, los desarrolladores pueden utilizar efectivamente las sugerencias de tipo con las funciones lambda en sus proyectos de Python de LabEx, mejorando la calidad y la legibilidad del código.