Встречается на 23% собеседований по Python

Что такое лямбда-функции

Лямбда-функции — это анонимные функции в Python, которые определяются с помощью ключевого слова lambda и не имеют имени. Они используются для создания небольших, одноразовых функций, которые обычно передаются в качестве аргументов в функции высшего порядка, такие как map, filter и reduce. Основное ограничение лямбды — она может содержать только одно выражение, которое автоматически возвращается. В отличие от обычных функций, лямбда не может содержать операторы, такие как return, if, for и т.д., но может использовать выражения, включая условные выражения и вызовы функций.

Как это работает

Синтаксис лямбды: lambda аргументы: выражение. Например, lambda x: x * 2 — это функция, которая принимает один аргумент x и возвращает x * 2. Лямбда не создает имени в пространстве имен, поэтому она не может быть вызвана позже по имени, если только не присвоена переменной (что обычно не рекомендуется, так как теряется смысл анонимности).

Лямбды часто используются в сочетании с функциями, которые принимают другие функции в качестве аргументов. Например, map(lambda x: x ** 2, [1, 2, 3]) применит квадратичную функцию к каждому элементу списка. Аналогично, filter(lambda x: x % 2 == 0, range(10)) отфильтрует четные числа.

Пример

python
# Лямбда, передаваемая в map
numbers = [1, 2, 3, 4]
squared = list(map(lambda x: x ** 2, numbers))
print(squared)  # [1, 4, 9, 16]

# Лямбда, передаваемая в filter
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)  # [2, 4]

# Лямбда, передаваемая в reduce (из functools)
from functools import reduce
sum_all = reduce(lambda a, b: a + b, numbers)
print(sum_all)  # 10

Подводные камни

  • Одно выражение: Лямбда может содержать только одно выражение. Нельзя использовать присваивание, return, if-блоки и другие операторы. Однако можно использовать тернарный оператор: lambda x: 'even' if x % 2 == 0 else 'odd'.
  • Многострочность: Хотя лямбда обычно записывается в одну строку, можно оформить тело в несколько строк, используя скобки. Например:
    python
    func = lambda x: (
        x * 2 if x > 0 else x * 3
    )
    Но это не добавляет возможности использовать операторы, только улучшает читаемость.
  • Точка с запятой: Нельзя использовать точку с запятой для разделения операторов внутри лямбды, так как это нарушит синтаксис.
  • Отладка: Лямбды сложнее отлаживать, так как они не имеют имени, и трассировка стека будет показывать <lambda> вместо понятного имени функции.

Когда использовать

Лямбды уместны, когда функция нужна только один раз и ее логика проста. Например, при сортировке с ключом: sorted(points, key=lambda p: p[1]). Если функция сложная или используется многократно, лучше определить обычную функцию через def.

Коротко

  • Лямбда — анонимная функция, состоящая из одного выражения.
  • Используется как аргумент в map, filter, reduce и других функциях высшего порядка.
  • Нельзя использовать операторы, только выражения; многострочность достигается скобками.
  • Для сложной логики предпочтительнее def.
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы