假设我有一个功能列表
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)
但事情是这样的方法不适用于多个功能!
答案 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)
任意数量的论点变得更加复杂......