以编程方式创建函数

Uli*_*liw 2 python combinations function programmatically-created

关于这个主题有很多有趣的帖子,但我似乎要么不理解他们的答案,要么目标不同。这就是我正在尝试做的事情。我有两个(或更多)函数想要组合成一个新函数。以下片段显示了我的开始内容以及我想要的结束内容。

def a(x):
    0.2 * x[1] - 0.4 * x[0]

def b(x):
    0.4 * x[0] - 0.2 * x[1]

def ab(x):
    return [0.2 * x[1] - 0.4 * x[0], 0.4 * x[0] - 0.2 * x[1]]
Run Code Online (Sandbox Code Playgroud)

问题是,我想ab在运行时动态创建。我有一个包含所有函数的列表ml,因此我可以在新函数中执行以下操作

def abl(x):
    ml = [a, b]
    rl = []
    i = 0
    for f in ml:
        rl.append(f(x[i]))
        i = i + 1 
Run Code Online (Sandbox Code Playgroud)

然后打电话abl。该代码组合了各个函数并产生预期的输出。然而,每次调用都abl rl必须重新构建,这似乎很浪费。

是否有另一种方法可以组合ab来创建新函数ab

Ran*_*vis 7

您可以通过lambda 表达式动态返回新函数:

def a(x):
    return 0.2 * x[1] - 0.4 * x[0]

def b(x):
    return 0.4 * x[0] - 0.2 * x[1]

def combine(func1, func2):
    return lambda x: [func1(x), func2(x)]
    
ab = combine(a, b)
print(ab([1.3, 2.9]))
Run Code Online (Sandbox Code Playgroud)

输出:

[0.05999999999999994, -0.05999999999999994]
Run Code Online (Sandbox Code Playgroud)