Что такое каррирование функций в Python?

Ответ

Каррирование (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}")

Основные преимущества:

  • Переиспользование кода: Позволяет создавать специализированные функции из более общих.
  • Композиция: Упрощает объединение функций в цепочки вызовов.
  • Читаемость: В некоторых случаях улучшает читаемость кода, особенно в функциональном стиле.