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))
以下玩具函数通常采用两个输入变量:
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))