将函数及其参数传递给另一个函数
问题内容:
我有子功能的树类型:
- 一个没有任何参数(参数)的
- 第二个带一个参数
- 第三个具有多个参数(元组)
我正在尝试将该函数及其参数传递给另一个函数,该函数对所有子函数的结果求和并返回总和值。该函数中的参数应为:每个子函数的名称作为位置参数(
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