Оптимизация функции получения активных пользователей

Перенесите фильтрацию в БД: User.objects.filter(is_active=True). Если контракт требует список, оберните queryset в list.

Короткий ответ

Что ответить на собеседовании

Перенесите фильтрацию в БД: User.objects.filter(is_active=True). Если контракт требует список, оберните queryset в list.

Подробный разбор

Ответ с пояснениями

Условие

Повысить эффективность работы и улучшить читаемость представленного кода.

def get_active_users():
    active = []
    for user in User.objects.all():
        if user.is_active:
            active.append(user)
    return active

Ответ

Перенесите фильтрацию в БД: User.objects.filter(is_active=True). Если контракт требует список, оберните queryset в list.

def get_active_users():
    return list(User.objects.filter(is_active=True))

Исходный вариант загружает всех пользователей, создаёт ORM-объекты и лишь затем отбрасывает неактивных. Фильтр сокращает объём переданных данных и работу Python. Возврат queryset без list сохранит ленивость, но изменит тип и момент выполнения запроса — это нужно согласовать с вызывающим кодом.

Для большого числа активных пользователей полезнее пагинация или потоковая обработка. Индекс по булевому полю не гарантирует ускорения: его польза зависит от распределения значений и плана запроса.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее