如何在Python中实现函数的反柯里化(Uncurry)?
解决Python中uncurry_2函数的实现问题
嘿,我来帮你搞定这个uncurry_2函数的实现!先理清楚逻辑:你的curry_2是把一个接受两个参数的函数,转换成“先接受第一个参数,返回一个接受第二个参数的函数”的柯里化形式。那uncurry_2的作用刚好相反——把已经柯里化的二元函数,重新转换成接受两个参数的普通函数。
实现代码
直接看这个简洁的实现:
def uncurry_2(f): return lambda x, y: f(x)(y)
验证效果
把它加到你的代码里测试一下:
def range_new(x, y): return [i for i in range(x, y+1)] def curry_2(f): return lambda x: lambda y: f(x, y) def uncurry_2(f): return lambda x, y: f(x)(y) # 原函数调用 print(range_new(1, 10)) # 输出 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] # 柯里化后调用 curried_range = curry_2(range_new) countup = curried_range(1) print(countup(10)) # 输出同样的列表 print(curried_range(1)(10)) # 输出同样的列表 # 反柯里化后调用 uncurried_range = uncurry_2(curried_range) print(uncurried_range(1, 10)) # 还是输出相同的列表,完美还原!
原理说明
uncurry_2返回的lambda函数会接受两个参数x和y,先把x传给柯里化后的函数f,得到一个只等待y的新函数,再把y传进去,就完成了原本二元函数的调用逻辑。整个过程就是柯里化的逆向操作,是不是很直观?
内容的提问来源于stack exchange,提问作者frhyme
相关产品推荐
相关产品推荐

