Python 中的多变量 lambda 函数,它随接收到的输入变量的数量而变化

Multivariate lambda function in Python that scales with number of input variables received

以下玩具函数通常采用两个输入变量:

f = lambda u1, u2 : (u1*u2)*(u1**2+u2**2)

但可以超出双变量情况扩展到更高维度:

if dim == 2:
    f = lambda u1, u2 : (u1*u2)*(u1**2+u2**2)
if dim == 3:
    f = lambda u1, u2, u3 : (u1*u2*u3)*(u1**2+u2**2+u3**2)
if dim == 4:
    f = lambda u1, u2, u3, u4 : (u1*u2*u3*u4)*(u1**2+u2**2+u3**2+u4**2)

如何编写 lambda 函数,以便它可以在调用中扩展自身 lambda u1, u2, u3, u4, ... 以及函数体本身,基于发送给它的输入数量,类似于定义函数的方式声明为 def f(*args) 其中 *args 是任意数量的输入参数?

lambda syntax supports the same parameter list syntax as the def syntax,包括可变位置和关键字参数。

f = lambda *us: math.prod(us) * sum(u**2 for u in us)

如果 *us 在乘以 1 或与 0 相加时不是不变的,则 *+ 操作可以跨元素应用通过 reduce:

from functools import reduce
import operator

f = lambda *us: reduce(operator.mul, us) * reduce(operator.add, (u**2 for u in us))