当前位置: 首页 > 知识库问答 >
问题:

如何将函数列表组合到可调用的[duplicate]

寿浩言
2023-03-14

我有一个简单的来源。

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(


共有2个答案

楚修为
2023-03-14

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

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)))

多亏了零点比雷埃夫斯小行星

拓拔嘉运
2023-03-14

可以使用闭包来完成:

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现在需要任意数量的函数
  • 在内部,它定义了另一个函数,聚集,这就是你所说的可调用。
  • function_aggregator返回可调用的,又名聚合到调用者
  • 调用者然后给它一个名字,myfunc在这种情况下
  • 从那时起,我们可以将myfunc视为一个函数,它接受1个参数并返回一些内容
 类似资料:
  • 我想在Sokoban游戏中保存我的玩家角色的步骤。首先我想用字符的实际位置填充一个int x和y的数组,称为“pos”。然后我想将这个数组添加到数组的ArrayList中,称为“moves”。 一个玩家位置的阵列: ArrayList为所有步骤,玩家在关卡: 如果将“int[]”放在ArrayList的尖括号内,则会出错。 如何将阵列位置添加到ArrayList移动?

  • 在有趣的功能中,当我将列表添加到其他列表时,它正在添加空列表,我可以找到原因有人可以帮助我这个程序是关于查找给定数组的不同组合

  • 问题内容: 实现以下目标的Python方法是什么? 的每个成员都是一个元组,其第一个成员是,第二个成员是。 问题答案: 在Python 2中:

  • 我正在探索一种方法来实现这一点,就像下面的SQL一样。 是一个将聚合到

  • 问题内容: 如何使用函数在python中将列表相乘?这就是我所拥有的: 所以我想用它来乘以list * list(1 * 1、2 * 2、3 * 3、4 * 4) 所以输出将是1、4、9和16。我该如何在python中执行第二个列表的操作?谢谢 问题答案: 我最喜欢的方式是在两个列表上映射运算符: ,至少在Python 3中,返回生成器。因此,如果您想要一个列表,则应将其转换为一个: 但是到那时,

  • 在执行时,是否有一种方法可以将聚合函数应用于dataframe的所有列(或列表)?换句话说,是否有一种方法可以避免对每个列都这样做: