19

I want to pass a Python function to another function with some of its parameters "filled out" ahead of time.

This is simplification what I am doing:

def add(x, y):
    return x + y

def increment_factory(i):  # create a function that increments by i
    return (lambda y: add(i, y))

inc2 = increment_factory(2)

print inc2(3) # prints 5

I don't want to use some sort of passing of args and later exploding it with *args because the function I am passing inc2 into doesn't know to pass args to it.

This feels a bit too clever for a group project... is there a more straightforward or pythonic way to do this?

Thanks!

2 Answers 2

37

This is called currying, or partial application. You can use the built-in functools.partial(). Something like the following would do what you want.

import functools
def add(x,y):
    return x + y

inc2 = functools.partial(add, 2)
print inc2(3)
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks! One of my favorite features of Haskell is the built-in currying. I should have just used the term :).
4

You could also accomplish the same with a lambda function:

inc2 = lambda y: add(2, y)

print inc2(3)

1 Comment

This is a way better answer. Accomplishes currying with simpler code and no import.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.