tgoop.com/pyproglib/6916
Create:
Last Update:
Last Update:
Шпаргалка: типизированные структуры данных в Python
Python поддерживает типизацию с помощью аннотаций, а также предоставляет удобные инструменты для описания структур — TypedDict и dataclasses.
TypedDict похож на обычный словарь, но с подсказками типов для ключей и значений. Это помогает задать чёткие ожидания, какие ключи и значения должны быть в словаре.
Пример:
from typing import TypedDict
class Metrics(TypedDict):
accuracy: float
precision: float
recall: float
AUC: float | None # необязательное поле
def evaluate_predictions(y_true: np.ndarray, y_pred: np.ndarray) -> Metrics:
# Возвращаем словарь с метриками
return Metrics(accuracy=0.66, precision=1.0, recall=0.5)
my_metrics = evaluate_predictions(y_true, y_pred)
print(my_metrics) # {'accuracy': 0.66, 'precision': 1.0, 'recall': 0.5}
Датаклассы упрощают создание классов с данными, автоматически генерируя методы вроде
__init__
. Можно сделать объекты неизменяемыми с frozen=True
.Пример:
from dataclasses import dataclass
@dataclass(frozen=True)
class ModelConfig:
model_path: str
data_path: str
batch_size: int = 32
learning_rate: float = 1e-3
num_epochs: int = 10
early_stopping: bool = False
config = ModelConfig(model_path="models/v1", data_path="data/train", batch_size=64)
print(config.batch_size) # 64
Типизированные словари и датаклассы можно вкладывать друг в друга, чтобы описать сложные структуры данных.
Пример:
from datetime import datetime
@dataclass
class ExperimentSummary:
datetime: datetime
model_config: ModelConfig
metrics: Metrics
experiment = ExperimentSummary(datetime=datetime.now(), model_config=config, metrics=my_metrics)
print(experiment.model_config.batch_size) # 64
Важные советы:
Библиотека питониста #буст