Passing functions with different number of arguments in Python - NOT VARIABLE ARGUMENTS
本问题已经有最佳答案,请猛点这里访问。
我想知道是否可以将参数数目不同的函数传递给Python中的另一个函数。
例如
1 2 3 4 5 6 7 8 9 | def aux_1(arg1,arg2): if arg1 > arg2: return 1 else: return 0 def aux_2(arg1,arg2,arg3): return arg1 + arg2 * arg3 def Main_fn(function_to_use,arg1, arg2, arg3): return function_to_use(?) >>>Main_fn(aux_1,1,2,1) #Example cases >>>Main_fn(aux_2,1,2,1) |
所以这是我的疑问,如果我传递函数aux_1,我如何确保它只使用arg1和arg2。同样,如果我使用aux_2,则需要使用所有三个参数。
我知道可以在主函数中使用一组if条件,使用inspect.getargspec()/varargs适当地传递参数。然而,这样的逻辑需要每次我创建一个新的辅助函数来处理它的参数时对主函数进行修改,这在大型开发场景中是不实际的。
因此,我正在寻找一种解决办法。
如果需要进一步澄清,请随时询问我。
是的,您可以使用
1 2 3 | import inspect def get_num_args(f): return len(inspect.getargspec(f)[0]) |
因此,您可以使用
1 2 3 4 | if get_num_args(function_to_use) == 2: function_to_use(arg1, arg2) else: function_to_use(arg1, arg2, arg3) |
。
它是可能的,但首先当您想要返回一个函数时,您必须知道如何调用主函数!请参见此示例:
1 2 3 4 5 6 7 8 9 10 | >>> def a(): ... print 3 ... >>> def b(func): ... return func ... >>> print b(a) <function a at 0x7feb48e30de8> >>> b(a()) 3 |
当您想在内部函数上使用参数时,当您将函数传递给main func时,您必须传递参数,而不是在定义main func时…所以你必须改变这个
1 2 | def Main_fn(function_to_use,arg1, arg2, arg3): return function_to_use(?) |
号
为此:
1 2 3 | def Main_fn(function_to_use,arg1, arg2, arg3): return function_to_use #Also note that when you pass arg1, arg2, arg3 in func you must pass them when you invoke the function , if you dont need them you must not pass them in define |
一个例子:
1 2 3 4 5 6 7 8 9 | >>> def a(i,j): ... print i+j ... >>> def b(func): ... return func ... >>> b(a(3,5)) 8 >>> |
。