如何在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)输出9g(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
相关产品推荐
相关产品推荐

