我有:
def f(x, y): return x**2 + y**2
def g(x, y): return x**3 + y**3
def h(x, y): return x**4 + y**4
我想创建一个新函数:
def J(x, y):
return f(x,y)*g(x,y)*h(x,y)
但是,我找不到以编程方式执行此操作的方法。 也就是说,采取类似的方式:
myFunctions = [f,g,h]
并返回一个新函数 J,它返回 f、g 和 h 的乘积。
另一个问题是,虽然 f、g 和 h 的参数数量始终相同,但该数量可能会发生变化。也就是说,它们都可以有五个参数而不是两个。
期望的行为:
print(J(2, 2)) # 4096
编辑
myFunctions 中的函数数量也是任意的。 我以为我的问题暗示了这一点,但在重读它后,我发现我根本没有说清楚。抱歉。
请您参考如下方法:
一个函数可以使用 * 接受任意多个参数,如下所示:
def J(*args):
这会将所有J 的参数存储在列表args 中。然后可以将该列表转换回多个参数以调用其他函数,如下所示:
def J(*args):
return f(*args) * g(*args)
这解决了参数个数变化的问题。所以现在让我们处理可以有任意多个函数的事实。首先我们需要调用列表中的函数。我们可以通过迭代它们并使用 () 来做到这一点:
def J(*args):
return [func(*args) for func in myFunctions]
这将返回函数返回值的列表。所以我们现在需要的是获取集合的产品:
from functools import reduce
from operator import mul
def product(numbers):
return reduce(mul, list, 1)
def J(*args):
return product(func(*args) for func in myFunctions)
