我有子功能的树类型:
我正在尝试将该函数及其参数传递给另一个函数,该函数对所有子函数的结果求和并返回总和值。该函数中的参数应为:每个子函数的名称作为位置参数( args),每个子函数的参数作为键值参数( kvargs)。
范例 :
def no_arg() def one_arg(a) def multiple_args(a, b, c, e, f) # execution of function_results_sum: function_results_sum( no_arg, one_arg, multiple_args, one_arg=23, multiple_args=(1, 2, 3, 4, 5))
到目前为止我做了什么:
def no_arg(): return 5 def ident(x): return x def mult(x, y): return x * y def function_results_sum(*args, **kwargs): return no_arg() + ident(kwargs[ident.__name__]) + mult(*kwargs[mult.__name__])
上面的代码将参数传递给每个子功能,但是 子功能名称是硬编码的 。我想修改当前代码,以便能够从* args获取函数名称。在下面,我写了一个伪代码,表示更少的我要实现的目标:
def function_results_sum(*args, **kwargs): for functionName in args: result = sum(funcionName(kwargs)) return result
我已经整天都在为解决这个问题而苦苦挣扎,所以请不要写信给我 “使用google不会造成伤害” ;)
这样的事情会起作用:
def no_arg(): return 5 def one_arg(x): return x def multiple_args(x, y): return x * y def function_results_sum(*args, **kwargs): result = 0 for func in args: result += func(*kwargs[func.__name__]) return result
输出:
function_results_sum( no_arg, one_arg, multiple_args, no_arg=(), one_arg=(23, ), multiple_args=(1,5)) 33
您所要求的唯一区别是,您必须将args放入一个元组中,然后解压缩为args以便以后传递。
如果不想为无参数函数提供任何内容,则可以再次检查func名称是否在kwargs中:
def function_results_sum(*args, **kwargs): result = 0 for func in args: if func.__name__ i kwargs: result += func(*kwargs[func.__name__]) else: result += func() return result