How do I write a function that returns another function? How do I write a function that returns another function? python python

How do I write a function that returns another function?


Try this, using Python:

import mathdef make_cylinder_volume_func(r):    def volume(h):        return math.pi * r * r * h    return volume

Use it like this, for example with radius=10 and height=5:

volume_radius_10 = make_cylinder_volume_func(10)volume_radius_10(5)=> 1570.7963267948967

Notice that returning a function was a simple matter of defining a new function inside the function, and returning it at the end - being careful to pass the appropriate parameters for each function. FYI, the technique of returning a function from another function is known as currying.


Using lambdas, also known as anonymous functions, you can abstract out the volume function inside the make_cylinder_volume_func to a single line. In no way different from Óscar López's answer, the solution using lambda is still in a sense 'more functional'.

This is how you can write the accepted answer using a lambda expression:

import mathdef make_cylinder_volume_fun(r):    return lambda h: math.pi * r * r * h

And then call as you'd any other curried function:

volume_radius_1 = make_cylinder_volume_fun(1)volume_radius_1(1) => 3.141592653589793


Just want to point out that you can do this with pymonad

 import pymonad  @pymonad.curry def add(a, b):     return a + b add5 = add(5) add5(4) 9