在Python中传递具有不同数量参数的函数 - 不变量参数

时间:2014-09-14 21:35:41

标签: python

我想知道是否可以将具有不同数量的参数的函数传递给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,这在大型开发场景中是不实际的。

因此,我正在寻找解决方法。

如果需要进一步澄清,请随时向我提问。

2 个答案:

答案 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
>>>