如何编写一个看起来像每个function_name的函数名和变量参数列表的函数

时间:2013-11-30 00:05:07

标签: python function arguments

找到一个好标题有点困难,如果这个有误导性的话,道歉......

我想编写一个函数,将其他函数(一个可能的参数)与其他参数一起使用。

例如,我有以下功能:

def f1():
    pass

def f2(arg1):
    pass

def f3(arg1, arg2):
    pass

所以我的功能看起来像这样

def master(mandatory_arg, f1, f2, arg1, f3, arg1, arg2, ...):
    mandatory_arg = some_value
    f1()
    f2(arg1)
    f3(arg1, arg2)

实际上,函数签名可能必须如下所示:

def master(mandatory_arg, *args):
    #magic happens here to parse * args
    #call each function with its argument list

我不知道有多少函数(和args将被传递给函数。编写这个函数的最佳方法是什么?

这个功能(主人)将由相当非技术人员使用,所以我想让他们尽可能容易。

我的问题是,如何解析* args以获取传递给* args的每个函数的函数名和参数。

3 个答案:

答案 0 :(得分:2)

你可以使用callable,或者inspect,inspect会告诉你函数需要多少参数:

import inspect
def master(mandatory_arg, *args):
    args = list(args)
    while args:
        f = args.pop(0)
        n = len(inspect.getargspec(f).args)
        p, args = args[:n], args[n:]
        f(*p)

master(mandatory_arg, f1, f2, 'a1', f3, 'a1', 'a2')

答案 1 :(得分:1)

也许您可以将函数列表(lfunc)和要传递给函数的参数列表(larg)用作参数

def master(mandatory_arg, lfunc, larg):
    for k,fun in enumerate(lfunc):
        fun(larg[:k])

答案 2 :(得分:0)

使用callable函数确定args的哪些元素是函数,哪些是参数,例如:

def master(mandatory_arg, *args):
    # Do something with mandatory_arg here
    func = None
    funcArgs = []
    for a in args:
        if callable(a):
            if func is not None: func(*funcArgs)
            func = a
            funcArgs = []
        else:
            funcArgs.append(a)
    if func is not None: func(*funcArgs)