Ответ
Каррирование (Currying) — это техника функционального программирования, которая преобразует функцию от множества аргументов в последовательность вложенных функций, каждая из которых принимает один аргумент.
Концепция
Вместо вызова f(a, b, c)
вы последовательно вызываете f(a)(b)(c)
. Это позволяет "зафиксировать" часть аргументов и передавать получившуюся функцию дальше.
Пример в Python
Хотя Python не поддерживает каррирование "из коробки", его можно реализовать вручную или использовать functools.partial
для достижения похожего эффекта — частичного применения.
from functools import partial
# Исходная функция
def add(x, y, z):
return x + y + z
# 1. Ручная реализация каррирования
def curry_add(x):
def inner1(y):
def inner2(z):
return x + y + z
return inner2
return inner1
# Использование
add_10 = curry_add(10)
add_10_and_5 = add_10(5)
result = add_10_and_5(3) # 18
print(f"Результат каррирования: {result}")
# 2. Идиоматичный способ через partial (частичное применение)
add_10_partial = partial(add, 10)
result_partial = add_10_partial(5, 3) # 18
print(f"Результат с partial: {result_partial}")
Основные преимущества:
- Переиспользование кода: Позволяет создавать специализированные функции из более общих.
- Композиция: Упрощает объединение функций в цепочки вызовов.
- Читаемость: В некоторых случаях улучшает читаемость кода, особенно в функциональном стиле.