Что такое lambda-функция (анонимная функция)?

Ответ

Lambda-функция — это анонимная (безымянная) функция, определяемая в одной строке с помощью ключевого слова lambda. Она может принимать аргументы и возвращает результат вычисления единственного выражения.

Синтаксис (на примере Python):

lambda arguments: expression

Основные характеристики:

  • Анонимность: Не требует имени и оператора def.
  • Одно выражение: Тело функции ограничено одним выражением, которое автоматически возвращается.
  • Использование как объекта: Может быть присвоена переменной или передана как аргумент.

Типичные сценарии использования:

  1. Как аргумент для функций высшего порядка (map, filter, sorted):

    numbers = [1, 2, 3, 4, 5]
    squared = list(map(lambda x: x ** 2, numbers))  # [1, 4, 9, 16, 25]
    evens = list(filter(lambda x: x % 2 == 0, numbers))  # [2, 4]
    
    points = [(1, 2), (3, 1), (5, -1)]
    sorted_by_y = sorted(points, key=lambda point: point[1])  # [(5, -1), (3, 1), (1, 2)]
  2. Внутри других конструкций (редко, для краткости):

    # Присваивание переменной (обычная функция часто предпочтительнее)
    add = lambda a, b: a + b
    print(add(5, 3))  # 8

Почему это важно: Лямбды обеспечивают лаконичность при работе с небольшими операциями, особенно в функциональном стиле программирования. Однако для сложной логики всегда следует использовать именованные функции (def) в интересах читаемости и отладки.

Ответ 18+ 🔞

Э, слушай, смотри, вот эта вся хуйня про лямбда-функции — это, блядь, такая штука, которая тебе жизнь упрощает, если не перегибать палку, а то потом сам себя не поймёшь, в рот меня чих-пых.

Короче, представь: тебе надо функцию, но такая мелкая, одноразовая, чтоб её даже имя давать — западло. Вот для этого и есть lambda. Это как анонимный боец, блядь. Пришёл, сделал дело, и хуй с горы. Синтаксис — проще пареной репы:

lambda arguments: expression

Вот и всё, ёпта. Аргументы слева, двоеточие, и одно-единственное выражение справа, которое и вернётся. Никаких тебе def, return — всё само.

Где это, сука, пригождается? Да везде, где от тебя ждут мелкую операцию, а писать целую функцию — терпения ноль, ебать.

  1. Вот, смотри, классика жанра — map и filter.
    Допустим, есть у тебя список чисел, и надо их все в квадрат возвести. Ну, можно, конечно, цикл писать, но зачем, если есть map?

    numbers = [1, 2, 3, 4, 5]
    squared = list(map(lambda x: x ** 2, numbers))  # [1, 4, 9, 16, 25]

    Видишь? lambda x: x ** 2. Пришёл x, умножился сам на себя, и на выход. Красота, блядь.
    Или отфильтровать только чётные:

    evens = list(filter(lambda x: x % 2 == 0, numbers))  # [2, 4]

    lambda x: x % 2 == 0 — проверяет, делится ли на два без остатка. Всё, пидарасы нечётные отсеялись.

  2. Ещё sorted, хитрая жопа.
    Допустим, есть точки с координатами, и их надо отсортировать не по X, а по Y. Ключ сортировки — вот он, на месте делается:

    points = [(1, 2), (3, 1), (5, -1)]
    sorted_by_y = sorted(points, key=lambda point: point[1])  # [(5, -1), (3, 1), (1, 2)]

    lambda point: point[1] — говорит: «Сортировать, блядь, по второму элементу кортежа». И всё работает, ебать мои старые костыли.

А теперь, сука, главное правило, которое ты должен выжечь себе на подкорке:
Лямбда — это для простых, блядь, операций в одну строчку. Если тебе уже хочется внутрь запихнуть if-elif-else, цикл или, не дай бог, ещё одну лямбду — остановись, ёпта! Ты превращаешь код в нечитаемую пиздопроебибну.
Для всего сложного есть нормальная, именованная функция через def. Читаемость, отладка, понимание — вот что главное. А лямбда — это просто удобный инструмент, а не повод выёбываться.

Запомнил? Иди, пробуй. Но без фанатизма, а то сам от себя охуеешь, когда через месяц на свой же код посмотришь.