Skip to main content
 首页 » 编程设计

python之以编程方式从其他函数列表中定义新函数

2025年05月04日12lvdongjie

我有:

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)