Провести код-ревью, найти все ошибки

Генератор нельзя индексировать, его truthiness не проверяет наличие элементов, а predicate должен получать obj, не object. Проще вернуть первый подходящий элемент через next.

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

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

Генератор нельзя индексировать, его truthiness не проверяет наличие элементов, а predicate должен получать obj, не object. Проще вернуть первый подходящий элемент через next.

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

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

Условие

Провести код-ревью, найти все ошибки

def get_first_matching_object(predicate, objects=[]): matching_objects = (obj for obj in objects if predicate(object)) if matching_objects: object = matching_objects[0] return object else: return None

Ответ

Генератор нельзя индексировать, его truthiness не проверяет наличие элементов, а predicate должен получать obj, не object. Проще вернуть первый подходящий элемент через next.

Исправление:

def get_first_matching_object(predicate, objects=()):
    return next((obj for obj in objects if predicate(obj)), None)

В исходнике первой проявится ошибка индексирования генератора. Если начать его перебирать, обращение к локальному object до присваивания тоже ошибочно. Имя дополнительно затеняет встроенный тип.

Общий изменяемый default [] здесь прямо не модифицируется, но создаёт ненужный риск; пустой tuple его убирает. Поиск останавливается на первом совпадении, время O(n), дополнительная память O(1). Если найденный элемент сам None, для различения отсутствия используйте sentinel.

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

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

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

Подробнее