Python 3.4中如何仅用lambda实现函数逆运算与组合?
用纯Lambda实现逆函数与函数组合
嘿,这个问题挺有意思的——只用lambda来搞定逆函数和函数组合对吧?咱们针对你的场景一步步来实现:
一、实现逆函数 opposite
你的转换函数都是线性单参数函数(形式为 f(x) = k * x),这类函数的逆函数很容易推导:如果 y = k*x,那么 x = y/k,而 k 其实就是 f(1)(代入x=1得到的结果)。
基于这个思路,我们可以用lambda直接写出opposite函数:
# 定义opposite:接收原函数f,返回它的逆函数 opposite = lambda f: lambda x: x / f(1) # 测试你的例子 inches_to_feets = lambda x: x*(1/12) feets_to_inches = opposite(inches_to_feets) print(feets_to_inches(2)) # 输出24,符合2英尺=24英寸的预期
⚠️ 注意:这个方法只适用于线性正比例函数,如果是非线性函数(比如lambda x: x**2),这种方式就不适用了,因为非线性函数的逆函数无法通过简单的除以f(1)得到。
二、实现函数组合 composition
函数组合的本质是“先执行一个函数,再把结果传给另一个函数”,也就是数学里的 (f ∘ g)(x) = f(g(x))。用lambda实现的话,就是接收两个函数f和g,返回一个新的lambda来完成这个链式调用:
# 定义composition:接收f和g,返回f(g(x))的组合函数 composition = lambda f, g: lambda x: f(g(x)) # 测试你的例子 miles_to_feets = lambda x: x*5280 # 先把英里转成英尺,再转成英寸,所以组合顺序是feets_to_inches ∘ miles_to_feets miles_to_inches = composition(feets_to_inches, miles_to_feets) print(miles_to_inches(1)) # 输出63360,符合1英里=63360英寸的预期
这里要注意组合的顺序:composition(f, g) 是先执行g,再把结果传给f,和数学上的函数组合顺序一致,所以你的需求里要把feets_to_inches放在第一个参数位置。
内容的提问来源于stack exchange,提问作者Shaked ast
相关产品推荐
相关产品推荐

