Python: passing a function with parameters as parameter
本问题已经有最佳答案,请猛点这里访问。
1 2 3 4 5 6 7 8 9 | def lite(a,b,c): #... def big(func): # func = callable() #... #main big(lite(1,2,3)) |
如何做到这一点?以什么方式将带有参数的函数传递给另一个函数?
为什么不这样做:
1 | big(lite, (1, 2, 3)) |
?
然后你可以做:
1 2 | def big(func, args): func(*args) |
1 2 3 4 | import functools #main big(functools.partial(lite, 1,2,3)) |
类似的问题通常有两种解决方法:
参见示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/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() |
不是这样,而是传递给大的lite()函数的返回值。
你应该这样做:
1 2 3 4 5 6 7 8 9 | 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)) |