如何定义多个任意函数的总和?

时间:2013-06-20 21:10:24

标签: python function

假设我有一个功能列表

f1(x,y),f2(x,y),....

如何定义以下功能:

z(x,y)=f1(x,y)+f2(x,y)+...

我希望以后能够指定x。所以如果有人把y = c值,我希望z函数成为x的函数!在简单的情况下,如果你有一个函数f,并且你想通过指定y = c使f(x,y)成为x的函数,你可以使用:

z=lambda x:f(x,c)

但事情是这样的方法不适用于多个功能!

4 个答案:

答案 0 :(得分:5)

对10个函数有用:

def z(x,y,functions):
    return sum(F(x,y) for F in functions)

所以你可以像:

一样使用它
z(x,y,(f,g,h))

或者如果函数的数量来自列表:

z(x,y,list_of_functions)

答案 1 :(得分:2)

假设您的功能列在functions列表中:

z = lambda x, y : sum((f(x, y) for f in functions))

答案 2 :(得分:2)

调整之前的答案,我们可以投入functools.partial来创建所需的行为。

我们可以执行部分​​函数调用(类似于haskell结构)来从未完全应用的函数生成新函数。看看:

from functools import partial

funcs = [lambda x, y: x + y] * 10 # a list of ten placeholder functions.

def z(functions, x, y):
    return sum(f(x, y) for f in functions)

a = partial(z, funcs, 1)
# 'a' is basically the same as: lambda y: z(funcs, 1, y)
print a # <functools.partial object at 0x7fd0c90246d8>
print a(1) # 20
print a(2) # 30
print a(3) # 40

更多信息:http://docs.python.org/2/library/functools.html#functools.partial

答案 3 :(得分:1)

如果您有其他任意功能怎么办?如果你想要对任何旧函数求和,该怎么办?

def funcSum(x, y, *funcs):
    return sum((func(x,y) for func in funcs))

funcSum(x, y, f, g, h)

任意数量的论点变得更加复杂......