我想知道是否可以将具有不同数量的参数的函数传递给Python中的另一个函数。
例如
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,则需要使用所有三个参数。
我知道可以在Main_fn中使用一组if条件,使用inspect.getargspec()/ varargs 来适当地传递参数。但是,每次我创建一个新的 aux 函数来处理其参数时,这样的逻辑都需要修改Main_fn,这在大型开发场景中是不实际的。
因此,我正在寻找解决方法。
如果需要进一步澄清,请随时向我提问。
答案 0 :(得分:1)
是的,您可以使用inspect.getargspec
来确定函数定义的参数数量:
import inspect
def get_num_args(f):
return len(inspect.getargspec(f)[0])
因此,您可以使用get_num_args
来决定要发送的参数数量:
if get_num_args(function_to_use) == 2:
function_to_use(arg1, arg2)
else:
function_to_use(arg1, arg2, arg3)
答案 1 :(得分:0)
它可能但首先当你想要返回一个函数时,你必须知道如何调用main函数!看这个例子:
>>> def a():
... print 3
...
>>> def b(func):
... return func
...
>>> print b(a)
<function a at 0x7feb48e30de8>
>>> b(a())
3
当你想把函数传递给main函数时你想在内部函数上使用args时你必须传递你的参数而不是在定义主函数时...所以你必须改变这个
def Main_fn(function_to_use,arg1, arg2, arg3):
return function_to_use(?)
到此:
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
一个例子:
>>> def a(i,j):
... print i+j
...
>>> def b(func):
... return func
...
>>> b(a(3,5))
8
>>>