Что такое лямбда-функции
Лямбда-функции — это анонимные функции в 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)) отфильтрует четные числа.
Пример
# Лямбда, передаваемая в 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.
