Поиск первого объекта, соответствующего условию

Проверка if gen не проверяет наличие совпадений, а gen[0] вызывает TypeError. Исправьте поиск через next(..., None) и используйте неизменяемый аргумент по умолчанию.

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

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

Проверка if gen не проверяет наличие совпадений, а gen[0] вызывает TypeError. Исправьте поиск через next(..., None) и используйте неизменяемый аргумент по умолчанию.

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

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

Условие

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

def get_first_matching_object(condition, items=[]):
    gen = (elem for elem in items if condition(elem))
    if gen:
        result = gen[0]
        return result
    else:
        return None

Ответ

Проверка if gen не проверяет наличие совпадений, а gen[0] вызывает TypeError. Исправьте поиск через next(..., None) и используйте неизменяемый аргумент по умолчанию.

Корректный однопроходный вариант:

def get_first_matching_object(condition, items=()):
    return next((item for item in items if condition(item)), None)

Он возвращает первый подходящий объект и не просматривает остаток после успеха. Для пустого входа или отсутствия совпадений вернётся None. Исключения самой condition не скрываются. Общий default-список в исходнике пока не мутируется, но () лучше отражает отсутствие необходимости менять вход и защищает от случайной последующей модификации.

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

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

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

Подробнее