开发者

Python: passing a function with parameters as parameter [duplicate]

This question already has answers here: 开发者_如何学JAVA Passing functions with arguments to another function in Python? [duplicate] (9 answers) Closed 4 years ago.
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?


Why not do:

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

?

Then you can do:

def big(func, args):
    func(*args)


import functools

#main
big(functools.partial(lite, 1,2,3))


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()


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))
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜