📝 Python

Lambda функции: Маленькие умные функции ⚡

0
Author
04e5cc8b-58ac-4bdc-bdee-661bbb
📅
Published
03.04.2026
⏱️
Reading time
6 min
👁️
Views
8
🌱
Level
Beginner

Что такое Lambda?

Lambda — это способ создать маленькую функцию в одну строку без имени.

Обычная функция:

def double(x):
    return x * 2

result = double(5)  # 10

Lambda функция:

double = lambda x: x * 2

result = double(5)  # 10

Та же функция, но короче!


Синтаксис Lambda

lambda аргументы: выражение

Части:
- lambda — ключевое слово
- аргументы — параметры (как в def)
- : — разделитель
- выражение — что вернуть (ОДНА строка!)


Примеры Lambda

1. Простая арифметика

# Сложение
add = lambda a, b: a + b
print(add(3, 5))  # 8

# Квадрат числа
square = lambda x: x ** 2
print(square(4))  # 16

# Проверка чётности
is_even = lambda n: n % 2 == 0
print(is_even(10))  # True
print(is_even(7))   # False

2. Со строками

# Приветствие
greet = lambda name: f"Привет, {name}!"
print(greet("Алиса"))  # Привет, Алиса!

# Длина строки
length = lambda s: len(s)
print(length("Python"))  # 6

3. С условиями

# Максимум из двух
max_num = lambda a, b: a if a > b else b
print(max_num(10, 20))  # 20

# Положительное или нет
sign = lambda x: "+" if x >= 0 else "-"
print(sign(5))   # +
print(sign(-3))  # -

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

✅ Хорошо использовать:

1. Внутри других функций:

numbers = [1, 2, 3, 4, 5]

# sorted с lambda
sorted_desc = sorted(numbers, key=lambda x: -x)
print(sorted_desc)  # [5, 4, 3, 2, 1]

# map с lambda (скоро изучим!)
doubled = list(map(lambda x: x * 2, numbers))
print(doubled)  # [2, 4, 6, 8, 10]

2. Простые преобразования:

students = [
    {"name": "Алиса", "grade": 95},
    {"name": "Боб", "grade": 87},
    {"name": "Карл", "grade": 92}
]

# Сортировка по оценке
sorted_students = sorted(students, key=lambda s: s["grade"], reverse=True)
print(sorted_students[0]["name"])  # Алиса

3. Генерация данных:

import random

# Lambda для случайных чисел
random_point = lambda: random.randint(0, 100)

points = [random_point() for _ in range(5)]
print(points)  # [42, 17, 89, 5, 63] (случайные!)

❌ Плохо использовать:

1. Сложная логика:

# ❌ ПЛОХО - слишком сложно
check = lambda x: x > 0 and x < 100 and x % 2 == 0 and str(x)[0] != "5"

# ✅ ХОРОШО - обычная функция
def check_number(x):
    """Проверить число по критериям."""
    if x <= 0 or x >= 100:
        return False
    if x % 2 != 0:
        return False
    if str(x)[0] == "5":
        return False
    return True

2. Нужен docstring:

# ❌ ПЛОХО - нельзя добавить описание
calculate = lambda x, y, z: (x + y) * z / 2

# ✅ ХОРОШО - с документацией
def calculate_formula(x, y, z):
    """
    Вычислить по формуле: (x + y) * z / 2

    Args:
        x, y, z: Числа для расчёта

    Returns:
        float: Результат формулы
    """
    return (x + y) * z / 2

Lambda vs Обычная функция

Критерий Lambda Def
Длина Одна строка Много строк OK
Имя Анонимная (без имени) Обязательно имя
Docstring ❌ Нельзя ✅ Можно
Сложность Простые операции Любая сложность
Использование Внутри других функций Везде

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

Пример 1: Сортировка товаров

products = [
    {"name": "Ноутбук", "price": 50000},
    {"name": "Мышка", "price": 500},
    {"name": "Клавиатура", "price": 3000}
]

# Сортировка по цене
cheap_first = sorted(products, key=lambda p: p["price"])
expensive_first = sorted(products, key=lambda p: p["price"], reverse=True)

print(cheap_first[0]["name"])  # Мышка
print(expensive_first[0]["name"])  # Ноутбук

Пример 2: Фильтрация данных

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Только чётные (скоро изучим filter!)
even = list(filter(lambda x: x % 2 == 0, numbers))
print(even)  # [2, 4, 6, 8, 10]

# Только > 5
big = list(filter(lambda x: x > 5, numbers))
print(big)  # [6, 7, 8, 9, 10]

Пример 3: Обработка списка словарей

students = [
    {"name": "Алиса", "age": 20, "grade": 95},
    {"name": "Боб", "age": 19, "grade": 87},
    {"name": "Карл", "age": 21, "grade": 92}
]

# Найти студента с максимальной оценкой
best = max(students, key=lambda s: s["grade"])
print(f"Лучший студент: {best['name']} ({best['grade']})")

# Найти самого младшего
youngest = min(students, key=lambda s: s["age"])
print(f"Самый младший: {youngest['name']} ({youngest['age']} лет)")

Множественные параметры

Lambda может принимать несколько параметров:

# Два параметра
multiply = lambda x, y: x * y
print(multiply(5, 3))  # 15

# Три параметра
volume = lambda l, w, h: l * w * h
print(volume(2, 3, 4))  # 24

# С значениями по умолчанию (не работает!)
# ❌ power = lambda x, n=2: x ** n  # SyntaxError!

# Для значений по умолчанию используй def:
def power(x, n=2):
    return x ** n

Lambda и встроенные функции

С sorted()

words = ["Python", "JavaScript", "Go", "C++", "Rust"]

# По длине слова
by_length = sorted(words, key=lambda w: len(w))
print(by_length)  # ['Go', 'C++', 'Rust', 'Python', 'JavaScript']

# В обратном алфавитном порядке
reverse_alpha = sorted(words, key=lambda w: w.lower(), reverse=True)
print(reverse_alpha)  # ['Rust', 'Python', 'JavaScript', 'Go', 'C++']

С max() и min()

data = [10, 3, 45, 7, 89, 12]

# Максимальный элемент (можно без lambda)
print(max(data))  # 89

# Максимальный по модулю
numbers = [-50, 10, -30, 5]
max_abs = max(numbers, key=lambda x: abs(x))
print(max_abs)  # -50 (модуль 50 самый большой!)

Распространённые ошибки

Ошибка 1: Много строк

# ❌ ОШИБКА - lambda только ОДНА строка!
calc = lambda x:
    result = x * 2
    return result

# ✅ ПРАВИЛЬНО
calc = lambda x: x * 2

Ошибка 2: Присваивания

# ❌ ОШИБКА - нельзя присваивать в lambda
update = lambda x: x = x + 1  # SyntaxError!

# ✅ ПРАВИЛЬНО - используй обычную функцию
def update(x):
    x = x + 1
    return x

Ошибка 3: Забыли return

# ❌ ПЛОХО
def double(x):
    x * 2  # Забыли return!

result = double(5)
print(result)  # None

# ✅ ХОРОШО - lambda всегда возвращает
double = lambda x: x * 2
result = double(5)
print(result)  # 10

Когда НЕ нужна Lambda?

Не сохраняй в переменную!

# ❌ ПЛОХАЯ практика
double = lambda x: x * 2
square = lambda x: x ** 2
add = lambda a, b: a + b

# ✅ ХОРОШО - используй def
def double(x):
    return x * 2

def square(x):
    return x ** 2

def add(a, b):
    return a + b

Почему?
- Lambda для одноразового использования
- Если сохраняешь → нужно имя → используй def!


Резюме

Lambda — это:

  • ✅ Анонимная функция в одну строку
  • ✅ Удобна внутри других функций
  • ✅ Короткая и чёткая
  • ❌ НЕ для сложной логики
  • ❌ НЕ для сохранения в переменные

Синтаксис:

lambda параметры: выражение

Типичное использование:

# Сортировка
sorted(data, key=lambda x: x["field"])

# С map/filter (скоро изучим!)
list(map(lambda x: x * 2, numbers))
list(filter(lambda x: x > 0, numbers))

# Генерация
[lambda_func() for _ in range(10)]

Что дальше?

Теперь ты знаешь lambda! 🎉

Следующие темы:
- map() — применить функцию к списку
- filter() — отобрать элементы
- reduce() — свернуть список в значение

Lambda — фундамент функционального программирования в Python! 🚀

Your reaction to the article

💬 Comments (0)

🔐 Sign in to leave a comment
🚪 Login
💭

No comments yet

Be the first to share your opinion about this article!

🔗 Similar

Similar articles

Continue learning with these materials

📝

JSON: Сохранение данных как в большой игре 💾

Цель: Научиться сохранять и загружать данные в формате JSON.

📅 03.04.2026 👁️ 10
📝

map() — Преобразуй всё разом! 🔄

map() применяет функцию к каждому элементу списка и возвращает результаты.

📅 03.04.2026 👁️ 7
📝

filter() — Отбери лучшее! 🔍

filter() отбирает элементы, которые проходят проверку (возвращают True).

📅 03.04.2026 👁️ 9

Did you like the article?

Subscribe to our updates and receive new articles first. Grow with PyLand!