0

假设我有一个函数列表

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

4 回答 4

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)
于 2013-06-20T21:13:41.773 回答
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

于 2013-06-20T21:41:33.483 回答
2

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

z = lambda x, y : sum((f(x, y) for f in functions))
于 2013-06-20T21:17:24.193 回答
1

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

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

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

任意数量的参数变得有点复杂......

于 2013-06-20T21:27:16.197 回答