如何将函数列表组合到callab

2024-05-29 02:15:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的消息来源。你知道吗

def h(x):
    return x + 1

def m(x):
    return x + 2

def n(x):
    return x * 10

def function_aggregator(fun_list, num):
    return_fun = None
    for fun in fun_list[::-1]:
        if return_fun:
            return_fun = fun(return_fun)
        else:
            return_fun = fun(num)
    return return_fun

if __name__ == "__main__":
    lst = [h, m, n]
    y = function_aggregator(lst, 4)
    print(y)

有没有办法让function_aggregator方法只接收列表并返回一个可调用的函数,它将与h(m(n(<any_number>))相同


Tags: nameinnoneforreturnifdeffunction
2条回答

前面的答案非常接近。确切答案是:

def function_aggregator(fun_list):
    def wrapper(arg):
        for fun in reversed(fun_list):
            arg = fun(arg)
        return arg
    return wrapper


if __name__ == "__main__":
    lst = [g, f, n, m, h]
    p = function_aggregator(lst)
    x = 3
    print("p(x): {}".format(p(x)))

多亏了Zero Piraeuscommet

可以使用闭包:

def function_aggregator(*func_list):
    def aggregate(num):
        for func in reversed(func_list):
            num = func(num)
        return num
    return aggregate

if __name__ == "__main__":
    myfunc = function_aggregator(h, m, n)
    print(myfunc(4))

注意事项

  • function_aggregator现在接受任意数量的函数
  • 在内部,它定义了另一个函数aggregate,这就是您所说的可调用的。你知道吗
  • function_aggregator可调用的aggregate返回给调用者
  • 然后调用者给它起一个名字,在本例中是myfunc
  • 从那时起,我们可以把myfunc看作一个函数,它接受一个参数并返回一些东西

相关问题 更多 >

    热门问题