Python:传递一个带参数的函数作为参数

时间:2010-02-27 13:04:32

标签: python function

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

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


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

怎么做?
以什么方式将带参数的函数传递给另一个函数?

4 个答案:

答案 0 :(得分:36)

为什么不这样做:

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

然后你可以这样做:

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

答案 1 :(得分:7)

import functools

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

答案 2 :(得分:3)

类似问题通常以两种方式解决:

  1. 使用lambda ...但是传递的函数将需要一个参数,因此需要更改big()
  2. 使用命名函数调用带参数的原始函数。请注意,这样的函数可以在其他函数中声明,参数可以是变量。
  3. 参见示例:

    #!/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()
    

答案 3 :(得分:0)

不是这样,你传递的是lite()函数的返回值。

您应该执行以下操作:

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