Python Lab

Lambda-функции в Python: полное руководство

Что такое lambda, когда использовать, а когда лучше обычную def. Примеры с map, filter, sorted.

10 ноября 2025 г.·7 мин чтения
lambdaфункцииmapfilter

Что такое lambda?

lambda — способ создать анонимную функцию в одну строку:

square = lambda x: x ** 2
print(square(5))  # 25

Это полный эквивалент:

def square(x):
    return x ** 2

Синтаксис

lambda параметры: выражение
  • Только одно выражение (не несколько операторов)
  • Неявный return
  • Можно несколько параметров: lambda x, y: x + y

map() — применить функцию к каждому элементу

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

То же самое через list comprehension (обычно предпочтительнее):

squares = [x ** 2 for x in numbers]

filter() — отфильтровать список

numbers = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, numbers))
print(evens)  # [2, 4, 6]

sorted() с key=

Это самый частый и обоснованный случай применения lambda:

words = ["banana", "apple", "cherry", "date"]
sorted_words = sorted(words, key=lambda w: len(w))
print(sorted_words)  # ['date', 'apple', 'banana', 'cherry']

Сортировка списка словарей:

students = [
    {"name": "Alice", "grade": 90},
    {"name": "Bob", "grade": 85},
    {"name": "Carol", "grade": 92},
]
top = sorted(students, key=lambda s: s["grade"], reverse=True)
print(top[0]["name"])  # Carol

Когда lambda уместна

Хорошо: в аргументах key=, sort(), sorted(), max(), min():

pairs = [(1, "b"), (3, "a"), (2, "c")]
pairs.sort(key=lambda p: p[1])  # сортировка по второму элементу

Хорошо: короткие однострочные callback'и:

from functools import reduce
product = reduce(lambda x, y: x * y, [1, 2, 3, 4, 5])  # 120

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

Плохо: сложная логика в lambda трудно читается:

# Не делайте так:
f = lambda x: x ** 2 if x > 0 else -x if x < 0 else 0

# Лучше:
def f(x):
    if x > 0:
        return x ** 2
    elif x < 0:
        return -x
    return 0

Плохо: присваивание lambda переменной (PEP 8 запрещает):

# PEP 8 говорит: используй def
double = lambda x: x * 2  # ❌

def double(x):  # ✅
    return x * 2

Lambda с несколькими аргументами

multiply = lambda x, y: x * y
print(multiply(3, 4))  # 12

# С default значением
greet = lambda name, greeting="Привет": f"{greeting}, {name}!"
print(greet("Alice"))          # Привет, Alice!
print(greet("Bob", "Здравствуй"))  # Здравствуй, Bob!

Практические примеры

Группировка данных

from itertools import groupby

data = [("alice", 1), ("bob", 2), ("alice", 3), ("bob", 4)]
data.sort(key=lambda x: x[0])

for name, items in groupby(data, key=lambda x: x[0]):
    values = [v for _, v in items]
    print(f"{name}: {values}")
# alice: [1, 3]
# bob: [2, 4]

Минимальный элемент по критерию

products = [
    {"name": "Ноутбук", "price": 50000},
    {"name": "Мышь", "price": 1500},
    {"name": "Монитор", "price": 25000},
]
cheapest = min(products, key=lambda p: p["price"])
print(cheapest["name"])  # Мышь

Итог

СитуацияИспользовать lambda?
key= в sorted/max/min✅ Да
Простой однострочный callback✅ Да
Сложная логика❌ Нет, используй def
Присваивание переменной❌ Нет, PEP 8
Несколько операторов❌ Невозможно

Lambda — удобный инструмент для коротких операций, но не замена обычным функциям.

Хочешь закрепить знания?

Попробуй решить задачи на Python в интерактивном тренажёре

К задачам