Data Science ML Python Tech

Диспетчеризация через словарь функций

Dictionary dispatch, dispatch table – таблица диспетчеризации.

Техника программирования, позволяющая оптимизировать код и избавиться от множества конструкций if-elif-else.

Пример 1

# Даны три однотипные функции, принимающие одинаковые аргументы

def process_admin_request(user, request):
    return f"Admin {user} processed: {request}"

def process_manager_request(user, request):
    return f"Manager {user} processed: {request}"

def process_client_request(user, request):
    return f"Client {user} processed: {request}"

# Таблица диспетчеризации: роли → функции
group_to_process_method = {
    "admin": process_admin_request,
    "manager": process_manager_request,
    "client": process_client_request,
}

# Пример данных
class User:
    def __init__(self, name, group):
        self.name = name
        self.group = group

user = User("Alice", "manager")
request = "update database"

# Вызов функции через таблицу диспетчеризации
result = group_to_process_method[user.group](user.name, request)
print(result)

### Вывод
# Manager Alice processed: update database

Пример 2 – применение в Data Science

Обеспечиваем выбор метода нормализации данных.

import numpy as np
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler

# "Фабрики" для скейлеров
def standard_scaler(data):
    return StandardScaler().fit_transform(data)

def minmax_scaler(data):
    return MinMaxScaler().fit_transform(data)

def robust_scaler(data):
    return RobustScaler().fit_transform(data)

# Таблица диспетчеризации
scaler_methods = {
    "standard": standard_scaler,
    "minmax": minmax_scaler,
    "robust": robust_scaler,
}

# Данные
X = np.array([[1, 100], [2, 300], [3, 500]], dtype=float)

# Допустим, пользователь выбирает метод "robust"
chosen_method = "standard"

# Автоматически применяем соответствующий метод
X_scaled = scaler_methods[chosen_method](X)

print("Исходные данные:\n", X)
print("После нормализации:", chosen_method, "\n", X_scaled)

Или выбор модели для обучения.

from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.svm import SVC

# Таблица диспетчеризации моделей
model_dispatch = {
    "logreg": LogisticRegression,
    "tree": DecisionTreeClassifier,
    "svm": SVC,
}

# Допустим, выбрали метод "tree"
chosen_model = "tree"

# Создаем модель через диспетчеризацию
model = model_dispatch[chosen_model](max_depth=3)

print("Используемая модель:", model)

Вставить формулу как
Блок
Строка
Дополнительные настройки
Цвет формулы
Цвет текста
#333333
Используйте LaTeX для набора формулы
Предпросмотр
\({}\)
Формула не набрана
Вставить