Python: passing a function with parameters as parameter

Question:

def lite(a,b,c):
    #...

def big(func): # func = callable()
    #...


#main
big(lite(1,2,3))

how to do this?
in what way to pass function with parameters to another function?

Asked By: Mike

||

Answers:

Why not do:

big(lite, (1, 2, 3))

?

Then you can do:

def big(func, args):
    func(*args)
Answered By: Skilldrick
import functools

#main
big(functools.partial(lite, 1,2,3))
Answered By: Teddy

Not this way, you’re passing to big the return value of lite() function.

You should do something like:

def lite(a, b, c):
    return a + b + c

def big(func, arg):
    print func(arg[0], arg[1], arg[2])



big(lite, (1, 2, 3))
Answered By: Enrico Carlesso

Similar problem is usually solved in two ways:

  1. With lambda… but then the passed function will expect one argument, so big() needs to be changed
  2. With named functions calling the original functions with arguments. Please note, that such function can be declared inside other function and the arguments can be variables.

See the example:

#!/usr/bin/python

def lite(a,b,c):
    return "%r,%r,%r" % (a,b,c)

def big(func): # func = callable()
    print func()

def big2(func): # func = callable with one argument
    print func("anything")


def main():
    param1 = 1
    param2 = 2
    param3 = 3

    big2(lambda x: lite(param1, param2, param3))

    def lite_with_params():
        return lite(param1,param2,param3)

    big(lite_with_params)

main()
Answered By: Jacek Konieczny
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.