2010-02-27 76 views

回答

31

为什么不这样做:

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

然后,你可以这样做:

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

你甚至可以做'大(精简版,1,2,3)'和'高清大(FUNC,*参数):FUNC(*参数)' – 2010-02-27 14:35:50

+1

如果你可以(并且想要)改变'big','lite'有一个固定的签名,那很好。但通常一个或两个都是外部的。在这种情况下,泰迪的方法(“部分”)更普遍。 – Mark 2016-02-06 17:58:54

5
import functools 

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

不是这样,你传递给大精简版()函数的返回值。

你应该这样做:

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

这是什么元组解包 - 查看我的答案。 – Skilldrick 2010-02-27 13:18:34

3

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

  1. 和λ......但随后的传递函数会期待一个参数,这么大()的需求被改变
  2. 用命名函数调用具有参数的原始函数。请注意,这样的函数可以在其他函数中声明,参数可以是变量。

见例如:

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