Ejemplos prácticos de anotación
Escenarios de anotación de tipos en el mundo real
Funciones de procesamiento de datos
from typing import List, Dict, Optional
def filter_valid_users(users: List[Dict[str, str]]) -> List[Dict[str, str]]:
return [user for user in users if user.get('email')]
def calculate_average(numbers: List[float]) -> Optional[float]:
return sum(numbers) / len(numbers) if numbers else None
Interacción con API y red
from typing import Union, Dict, Any
def fetch_api_data(endpoint: str) -> Union[Dict[str, Any], None]:
try:
## Simulated API request
return {"status": "success", "data": [1, 2, 3]}
except Exception:
return None
Manejo de errores y anotaciones de tipos
from typing import Tuple, Union
def divide_numbers(a: float, b: float) -> Union[float, str]:
try:
return a / b
except ZeroDivisionError:
return "Division by zero error"
Comparación de estrategias de anotación
Escenario |
Tipo de retorno |
Estrategia de anotación |
Complejidad |
Cálculo simple |
Numérico |
Tipo directo |
Baja |
Filtrado de datos |
Lista |
Tipo genérico |
Media |
Manejo de errores |
Unión |
Múltiples retornos posibles |
Alta |
Flujo de anotación de tipos
graph TD
A[Function Input] --> B{Process Data}
B --> C{Validate Return}
C --> |Valid Type| D[Return Annotated Result]
C --> |Type Mismatch| E[Raise Type Error]
Técnicas avanzadas de anotación
from typing import Callable, TypeVar
T = TypeVar('T')
R = TypeVar('R')
def apply_transform(
data: List[T],
transformer: Callable[[T], R]
) -> List[R]:
return [transformer(item) for item in data]
Anotaciones de tipos para decoradores
from typing import Callable, Any
def log_return(func: Callable[..., Any]) -> Callable[..., Any]:
def wrapper(*args: Any, **kwargs: Any) -> Any:
result = func(*args, **kwargs)
print(f"Function returned: {result}")
return result
return wrapper
@log_return
def example_function(x: int) -> str:
return str(x * 2)
Mejores prácticas
- Utilice anotaciones de tipo precisas
- Maneje los posibles casos extremos
- Aproveche las capacidades del módulo
typing
- Considere la validación de tipos en tiempo de ejecución
Perspectiva de LabEx
Explore escenarios complejos de anotación de tipos en los entornos de Python de LabEx para mejorar sus habilidades de sugerencias de tipo.
Desafíos comunes
- Equilibrar la especificidad y la flexibilidad de los tipos
- Gestionar escenarios complejos de tipos de retorno
- Mantener la legibilidad de las sugerencias de tipo
- Integrar con bases de código existentes