Что такое Lambda-функции?

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

Ключевые понятия

Синтаксис Lambda-функций

Синтаксис lambda-функции очень прост:

Синтаксис lambda
lambda аргументы: выражение
Простой пример lambda-функции
# Обычная функция
def умножить(x, y):
    return x * y

# Эквивалентная lambda-функция
умножить = lambda x, y: x * y

# Использование
print(умножить(5, 3))  # Вывод: 15

Сравнение с обычными функциями

Давайте сравним обычные функции с lambda-функциями:

Обычная функция vs Lambda-функция
# Обычная функция
def квадрат(x):
    return x ** 2

print(квадрат(5))  # Вывод: 25

# Lambda-функция
квадрат = lambda x: x ** 2
print(квадрат(5))  # Вывод: 25

Использование Lambda-функций с map()

Функция map() применяет заданную функцию ко всем элементам итерируемого объекта.

Пример использования с map()
# Список чисел
числа = [1, 2, 3, 4, 5]

# Использование lambda с map для возведения в квадрат
квадраты = list(map(lambda x: x ** 2, числа))
print(квадраты)  # Вывод: [1, 4, 9, 16, 25]

# Преобразование температуры из Цельсия в Фаренгейт
температуры_цельсий = [0, 20, 30, 40]
температуры_фаренгейт = list(map(lambda c: (c * 9/5) + 32, температуры_цельсий))
print(температуры_фаренгейт)  # Вывод: [32.0, 68.0, 86.0, 104.0]

Использование Lambda-функций с filter()

Функция filter() создает итератор из элементов итерируемого объекта, для которых функция возвращает True.

Пример использования с filter()
# Список чисел
числа = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Фильтрация четных чисел
четные = list(filter(lambda x: x % 2 == 0, числа))
print(четные)  # Вывод: [2, 4, 6, 8, 10]

# Фильтрация строк по длине
слова = ["яблоко", "банан", "груша", "апельсин", "киви"]
длинные_слова = list(filter(lambda слово: len(слово) > 5, слова))
print(длинные_слова)  # Вывод: ['яблоко', 'апельсин']

Использование Lambda-функций с sorted()

Функция sorted() может использовать lambda-функции для сортировки по пользовательским критериям.

Пример использования с sorted()
# Список кортежей (имя, возраст)
люди = [("Анна", 25), ("Борис", 30), ("Виктория", 20), ("Дмитрий", 35)]

# Сортировка по возрасту
по_возрасту = sorted(люди, key=lambda человек: человек[1])
print(по_возрасту)  
# Вывод: [('Виктория', 20), ('Анна', 25), ('Борис', 30), ('Дмитрий', 35)]

# Сортировка по длине имени
по_длине_имени = sorted(люди, key=lambda человек: len(человек[0]))
print(по_длине_имени)  
# Вывод: [('Анна', 25), ('Борис', 30), ('Дмитрий', 35), ('Виктория', 20)]

Сложные Lambda-функции

Lambda-функции могут содержать условные выражения и более сложные конструкции:

Примеры сложных lambda-функций
# Тернарный оператор в lambda
абсолютное_значение = lambda x: x if x >= 0 else -x
print(абсолютное_значение(-5))  # Вывод: 5
print(абсолютное_значение(3))   # Вывод: 3

# Lambda с несколькими условиями
оценка = lambda баллы: "Отлично" if баллы >= 90 else "Хорошо" if баллы >= 70 else "Удовлетворительно" if баллы >= 50 else "Неудовлетворительно"
print(оценка(95))  # Вывод: Отлично
print(оценка(75))  # Вывод: Хорошо
print(оценка(45))  # Вывод: Неудовлетворительно

# Lambda с несколькими аргументами
расстояние = lambda x1, y1, x2, y2: ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** 0.5
print(расстояние(0, 0, 3, 4))  # Вывод: 5.0

Практические задания

Задания
  1. Создайте lambda-функцию для вычисления площади круга по радиусу. Используйте её с map() для списка радиусов.
  2. Напишите lambda-функцию для фильтрации слов, начинающихся с гласной буквы.
  3. Создайте lambda-функцию для сортировки списка словарей по значению определенного ключа.
  4. Реализуйте lambda-функцию для вычисления факториала числа (используйте рекурсию).
Решения:

Задание 1:

import math

# Lambda-функция для вычисления площади круга
площадь_круга = lambda r: math.pi * r ** 2

# Список радиусов
радиусы = [1, 2, 3, 4, 5]

# Вычисление площадей
площади = list(map(площадь_круга, радиусы))
print(площади)

Задание 2:

# Список слов
слова = ["яблоко", "банан", "груша", "апельсин", "киви", "арбуз", "дыня"]

# Гласные буквы
гласные = "аеёиоуыэюя"

# Lambda-функция для проверки, начинается ли слово с гласной
начинается_с_гласной = lambda слово: слово[0].lower() in гласные

# Фильтрация слов
слова_с_гласной = list(filter(начинается_с_гласной, слова))
print(слова_с_гласной)

Задание 3:

# Список словарей
студенты = [
    {"имя": "Анна", "возраст": 20, "средний_балл": 4.5},
    {"имя": "Борис", "возраст": 22, "средний_балл": 3.8},
    {"имя": "Виктория", "возраст": 19, "средний_балл": 4.9},
    {"имя": "Дмитрий", "возраст": 21, "средний_балл": 4.2}
]

# Сортировка по среднему баллу
по_баллам = sorted(студенты, key=lambda студент: студент["средний_балл"], reverse=True)
print(по_баллам)

Задание 4:

# Рекурсивная lambda-функция для вычисления факториала
факториал = lambda n: 1 if n <= 1 else n * факториал(n - 1)

# Тестирование
print(факториал(5))  # Вывод: 120
print(факториал(0))  # Вывод: 1
Предыдущий урок Следующий урок