Повышение эффективности функции поиска

Возвращайте первое совпадение сразу, не создавая список всех подходящих объектов. Замените изменяемый default на None или пустой кортеж.

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

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

Возвращайте первое совпадение сразу, не создавая список всех подходящих объектов. Замените изменяемый default на None или пустой кортеж.

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

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

Условие

Необходимо предложить несколько вариантов улучшения функции get_first_matching_object. Рассмотрите применение генераторов, встроенных функций Python и безопасных методов работы со значением по умолчанию.

def get_first_matching_object(cond, items=[]):
    found = [obj for obj in items if cond(obj)]
    if found:
        result = found[0]
        return result
    return None

get_first_matching_object(lambda x: x == 1, [2, 3, 4])

Ответ

Возвращайте первое совпадение сразу, не создавая список всех подходящих объектов. Замените изменяемый default на None или пустой кортеж.

def get_first_matching_object(cond, items=None):
    if items is None:
        items = ()
    for obj in items:
        if cond(obj):
            return obj
    return None

Короткая альтернатива: next((obj for obj in items if cond(obj)), None), если items уже нормализован. В исходном примере подходящих элементов нет, поэтому вернётся None.

Раннее завершение уменьшает число вызовов предиката, а дополнительная память становится O(1). Исходный default здесь не мутируется, но неизменяемый или None делает контракт безопаснее для будущих изменений. Если None допустим как найденный элемент, нужен отдельный маркер отсутствия.

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

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

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

Подробнее