Возврат результата при передаче лямбда‑функции

Функция не вернёт None: объект генератора истинен, поэтому выполнение попадёт в if и found[0] вызовет TypeError. Для первого совпадения используйте next(generator, None).

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

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

Функция не вернёт None: объект генератора истинен, поэтому выполнение попадёт в if и found[0] вызовет TypeError. Для первого совпадения используйте next(generator, None).

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

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

Условие

Определите, какое значение возвращает функция get_first_matching_object, когда ей передаётся лямбда‑выражение lambda x: x == 1 и список [2, 3, 4]. Убедитесь, что полученный результат соответствует ожидаемому поведению и в реализации нет логических ошибок.

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])

Ответ

Функция не вернёт None: объект генератора истинен, поэтому выполнение попадёт в if и found[0] вызовет TypeError. Для первого совпадения используйте next(generator, None).

Генератор не проверяет наличие элементов при приведении к bool и не поддерживает индексирование. Корректная ленивая реализация:

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

Для lambda x: x == 1 и [2, 3, 4] результат None. При найденном совпадении обход прекращается сразу. Неизменяемое значение по умолчанию убирает риск общего списка между вызовами; в исходном коде список сейчас не меняется, но это полезное упрощение контракта.

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

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

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

Подробнее