首先,最好使用def …语句而不是lambda来定义命名函数.请查看this SO问题及其答案以获取更多详细信息.但是,如果我正确理解要实现的目标,最好将线性函数定义为一个类(请参见下文).
是(谁)给的:
并且取决于斜率a和截距b.一个重要的后果是,您需要同时知道a和b才能以函数形式定义其逆.
在python中,例如,如果您定义一类线性函数并将反函数作为其方法之一,则可以实现此目的:
class f_lin:
def __init__(self, a, b=0):
self.a = float(a)
self.b = b
def __call__(self, x):
return self.a * x + self.b
def inv(self, y):
return (y - self.b) / self.a
现在您可以定义:
inches_to_meters = f_lin(0.0254)
并像这样使用它:
inches_to_meters(10)
Out[38]: 0.254
inches_to_meters.inv(0.254)
Out[39]: 10.0
inches_to_meters.inv(inches_to_meters(10))
Out[40]: 10.0
另外,您也可以为逆函数创建一个新对象,因为线性函数的逆函数仍然是线性函数:
class f_lin:
def __init__(self, a, b=0):
self.a = float(a)
self.b = b
def __call__(self, x):
return self.a * x + self.b
def get_inverse(self):
return self.__class__(1/self.a, - self.b/self.a)
然后您可以定义反函数,如下所示:
inches_to_meters = f_lin(0.0254)
meters_to_inches = inches_to_meters.get_inverse()
现在,您将线性函数及其反函数都作为对象:
inches_to_meters(10)
Out[43]: 0.254
meters_to_inches(0.254)
Out[44]: 10.0
inches_to_meters(meters_to_inches(10))
Out[45]: 10.0
这些只是两种方式,两种都没有按要求使用lambda.但是,我建议不要使用lambda进行此类操作.