Вопрос проверяет понимание ограничений lambda-функций и умение осознанно выбирать между краткостью и читаемостью кода.
lambda-функции удобны для простых выражений, но становятся проблемой, когда логика усложняется. В них нельзя использовать несколько выражений, операторы управления потоком или аннотации. Из-за отсутствия имени ухудшается читаемость и отладка. Также lambda плохо подходит для повторного использования и документирования. В таких случаях обычная функция через def предпочтительнее.
Lambda-функции в Python — это инструмент для краткого описания простой логики, но их чрезмерное использование может ухудшить качество кода.
Lambda-функция — это анонимная функция, состоящая из одного выражения и не имеющая собственного имени.
Ниже перечислены типовые сценарии, где lambda приносит больше вреда, чем пользы:
Сложная бизнес-логика
Если выражение перестает быть очевидным с первого взгляда, код становится трудночитаемым.
# плохо читается
result = list(filter(lambda x: x.is_active and x.age > 18 and x.role in roles, users))Необходимость повторного использования
Анонимные функции нельзя удобно переиспользовать без дублирования.
Отладка и логирование
У lambda нет имени, поэтому:
стек вызовов менее информативен
сложнее ставить breakpoints
Расширяемость в будущем
Lambda трудно расширить:
нельзя добавить try/except
нельзя использовать for, while, if как оператор
нельзя писать docstring
Снижение читаемости в публичном API
В библиотечном или командном коде lambda ухудшает понимание логики другими разработчиками.
defВместо lambda стоит выбрать обычную функцию, если:
логика длиннее одного простого выражения
требуется имя для семантики
важна поддерживаемость кода
def is_valid_user(user):
return user.is_active and user.age > 18 and user.role in roleslambda уместны для локальных, одноразовых и максимально простых выражений. Во всех остальных случаях def дает лучшую читаемость, отладку и поддержку.