小编典典

将函数及其参数传递给另一个函数

python

我有子功能的树类型:

  • 一个没有任何参数(参数)的
  • 第二个带一个参数
  • 第三个具有多个参数(元组)

我正在尝试将该函数及其参数传递给另一个函数,该函数对所有子函数的结果求和并返回总和值。该函数中的参数应为:每个子函数的名称作为位置参数(
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不会造成伤害” ;)


阅读 214

收藏
2021-01-20

共1个答案

小编典典

这样的事情会起作用:

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
2021-01-20