lambda x: lambda y: x + y
реализует сложение двух чисел в каррированном стиле.
Лямбда-выражения в Python играют ключевую роль в реализации функциональных паттернов, таких как карринг, благодаря своей способности создавать анонимные функции "на лету". Они позволяют удобно определять функции, которые возвращают другие функции, что является основой каррирования.
Карринг - это техника, при которой функция, принимающая несколько аргументов, преобразуется в последовательность функций, каждая из которых принимает только один аргумент. Вместо того чтобы передавать все аргументы сразу, мы передаем их по одному, и каждая функция возвращает новую функцию, ожидающую следующий аргумент. В итоге, после передачи всех аргументов, мы получаем результат.
Пример каррирования с использованием лямбда-выражений:
def curry(func):
def curried(*args):
if len(args) >= func.__code__.co_argcount:
return func(*args)
else:
return lambda *more_args: curried(*(args + more_args))
return curried
def add(x, y, z):
return x + y + z
curried_add = curry(add)
result1 = curried_add(1)(2)(3) # 6
result2 = curried_add(1, 2)(3) # 6
result3 = curried_add(1)(2, 3) # 6
print(f"Результат 1: {result1}")
print(f"Результат 2: {result2}")
print(f"Результат 3: {result3}")
Объяснение примера:
curry(func)
- функция, которая преобразует функцию func
(в данном случае add
) в каррированную версию.curried(*args)
- внутренняя функция, которая обрабатывает аргументы.len(args)
) равно или больше количества аргументов, ожидаемых исходной функцией (func.__code__.co_argcount
), то вызывается исходная функция func(*args)
с переданными аргументами.lambda *more_args: curried(*(args + more_args))
. Это лямбда-выражение принимает дополнительные аргументы (*more_args
) и рекурсивно вызывает curried
с объединением существующих аргументов (args
) и новых аргументов (more_args
). Таким образом, накапливаются аргументы до тех пор, пока не будет передано достаточное количество для вызова исходной функции.Преимущества использования лямбда-выражений для каррирования:
Другие примеры функциональных паттернов, использующих лямбда-выражения:
map
, filter
, reduce
). Лямбда-выражения часто используются для краткого определения функций, передаваемых этим функциям.В заключение, лямбда-выражения являются мощным инструментом в Python для реализации функциональных паттернов, таких как каррирование, благодаря своей лаконичности, анонимности и способности создавать функции высшего порядка. Они позволяют писать более выразительный и модульный код.