Определение первого подходящего элемента через оператор присваивания

Функция вернёт True, а не сам элемент 1. Оператор := сохраняет результат predicate(obj), поэтому возвращается булев результат проверки, хотя название функции обещает объект.

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

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

Функция вернёт True, а не сам элемент 1. Оператор := сохраняет результат predicate(obj), поэтому возвращается булев результат проверки, хотя название функции обещает объект.

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

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

Условие

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

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

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

Ответ

Функция вернёт True, а не сам элемент 1. Оператор := сохраняет результат predicate(obj), поэтому возвращается булев результат проверки, хотя название функции обещает объект.

На первом элементе predicate(1) возвращает True. Это значение присваивается переменной object и сразу возвращается. True == 1 истинно, но тип и смысл результата отличаются.

Правильный поиск объекта:

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

Имя object также затеняет встроенный тип, поэтому лучше его не использовать для локальной переменной. Default-список не мутируется, но неизменяемый кортеж яснее.

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

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

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

Подробнее