Skip to content
Advertisement

Is there a chain calling method in Python?

Is there a function in Python that would do this:

val = f3(f2(f1(arg)))

by typing this (for example):

val = chainCalling(arg,f3,f2,f1)

I just figured, since python is (arguably) a functional language the function I’m looking for will make syntax brighter

Advertisement

Answer

Use the reduce() function to chain calls:

from functools import reduce

val = reduce(lambda r, f: f(r), (f1, f2, f3), arg)

I used the forward-compatible functools.reduce() function; in Python 3 reduce() is no longer in the built-in namespace.

This can also be made a separate function, of course:

from functools import reduce

def chain(*funcs):
    def chained_call(arg):
        return reduce(lambda r, f: f(r), funcs, arg)

    return chained_call
Advertisement