Currying: Partial Argument Application with Functions in Python

Currying is a technique in mathematics and computer science named after the mathematician Haskell Curry.

In simple terms, you create new functions from a function that takes multiple arguments, each derived function will then take only a single argument.

This is done by applying Partial Argument Application to the function with multiple arguments that you are deriving.

Code Example

Let’s visualize this with a simple function that multiplies two numbers:

def multiply_numbers(a, b):
    return a * b

Using this function as a base, we decided to create a new function that takes a single argument and always multiplies the argument by 3, so the second function below calls the first one above but keeping the first argument of multiply_numbers(a, b) fixed as 3.

def multiply_by_three(a):
    return multiply_numbers(a, 3)

Rewriting multiply_by_three(a) as a lambda function, the code above will turn into:

multiply_by_three = lambda a : multiply_numbers(a, 3)

The argument b from multiply_numbers(a, b) was curried.

The partial function

The functools built-in module has the partial() function that allows us to use a partial application of a function in a more simplified way:

from functools import partial
multiply_by_three = partial(multiply_numbers, 3)

Executing the function multiply_by_three above with 5 as argument, we have:

>>> multiply_by_three(5)
15