假设我有一个函数列表
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)
但问题是这样的方法不能用于多个功能!
可用于 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)
调整先前的答案,我们可以投入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
假设您在列表中有您的功能functions
:
z = lambda x, y : sum((f(x, y) for f in functions))
如果您有其他任意功能怎么办?如果你想对任何旧的函数求和怎么办?
def funcSum(x, y, *funcs):
return sum((func(x,y) for func in funcs))
funcSum(x, y, f, g, h)
任意数量的参数变得有点复杂......