如何构建python函数结果的通用和

时间:2018-02-14 09:39:22

标签: python python-2.7

我想在python中构建函数的总和。但是,我不知道总和的长度。所有功能都是类似的,即具有一个输入和相同的输出类型。对于两个这样的东西可以工作

In [180]: def H(f, g):
     ...:     def _h(x):
     ...:         return f(x) + g(x)
     ...:     return _h

但是,我希望有一些通用的东西,我可以写H(*args),它返回args中所有函数的总和(也适用于一个)。

我是否认为这是建立功能总和的唯一方法?我不能为h = f+g写两个函数?

3 个答案:

答案 0 :(得分:3)

写一些可扩展的东西可能更容易。您应该使用内置函数sum进行实际求和。这将返回一个generator,它将每个函数应用于输入x:

def map_funcs(x, *funcs):
    return (f(x) for f in funcs)

funcs = lambda x: x + 1, lambda x: x**2
x = 10
print(sum(map_funcs(x, *funcs)))

如果你愿意,你也可以使它成为一个包装器,返回一些可调用的东西,类似于你已经得到的东西:

def map_funcs(*funcs):
    def wrapper(x):
        return (f(x) for f in funcs)
    return wrapper

funcs = lambda x: x + 1, lambda x: x**2
x = 10
print(sum(map_funcs(*funcs)(x)))
# 111

答案 1 :(得分:1)

是的,这是可能的。您必须使用sum()内置函数返回给定列表中所有值的总和。在此之前,您当然必须使用正确的参数计算运行H()的所有函数的列表:

def power_two(x):
    return x**2

def plus_20(x):
    return x + 20

def H(*args):

    def _h(x):
        _results = [f(x) for f in args]
        return sum(_results)

    return _h

if __name__ == '__main__':

    the_func = H(power_two, plus_20)
    final_result = the_func(2)

    print("(2^2) + (2+20) = %s" % the_func(2))
    print("(3^2) + (3+20) = %s" % the_func(3))

返回:

(2^2) + (2+20) = 26
(3^2) + (3+20) = 32

答案 2 :(得分:0)

试试这个: -

def H(*args):
    def _h(x):
      for func in args:
          z += func(x)
      return z
    return _h

只需循环函数参数然后求和。我想简单吗? 我希望它有所帮助!