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

如何在Python中实现接收柯里化函数与arity的uncurry_explicit函数?

实现uncurry_explicit函数还原指定元数的柯里化函数

问题背景

我有一个支持指定元数的柯里化函数curry_explicit,代码如下:

def curry_explicit(function, arity):
    if arity == 0:
        return function
    def get_args(args):
        if len(args) == arity:
            return function(*args)

        def curry(x):
            return get_args([*args, x])

        return curry

    return get_args([])

需要实现一个uncurry_explicit函数,接收柯里化后的函数和元数作为输入,满足以下示例运行效果:

f = curry_explicit(max, 3)
g = uncurry_explicit(f, 3)

print(f(3)(6)(9))
print(g(3, 6, 12))

期望输出:

9
12

解决方案

实现思路

要还原柯里化函数,核心是将传入的多个参数依次逐个传递给柯里化函数,逐步调用直到用完指定数量的参数,最终得到原函数的执行结果。

代码实现

def uncurry_explicit(curried_func, arity):
    def uncurried(*args):
        current = curried_func
        for arg in args:
            current = current(arg)
        return current
    return uncurried

验证效果

将上述代码与curry_explicit一起运行示例代码,就能得到预期的输出:

  • f(3)(6)(9)输出9
  • g(3, 6, 12)输出12

额外说明

如果需要处理传入参数数量与指定元数不匹配的场景,可以在uncurried函数中添加参数长度校验,避免错误调用:

def uncurry_explicit(curried_func, arity):
    def uncurried(*args):
        if len(args) != arity:
            raise ValueError(f"Expected {arity} arguments, got {len(args)}")
        current = curried_func
        for arg in args:
            current = current(arg)
        return current
    return uncurried

内容的提问来源于stack exchange,提问作者Danil Totjmyanin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 19:32:32