找到一个好标题有点困难,如果这个有误导性的话,道歉......
我想编写一个函数,将其他函数(一个可能的参数)与其他参数一起使用。
例如,我有以下功能:
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的每个函数的函数名和参数。
答案 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)