You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:54:17