Python 避易就难的柯里化,可以不用PyMonad库的装饰器而手动创建柯里化函数。通过函数定义的形式实现的一种方法如下所示:
def f(x, *args):
def f1(y, *args):
def f2(z):
return (x+y)*z
if args:
return f2(*args)
return f2
if args:
return f1(*args)
return f1
这里将函数
柯里化为了函数f(x)
,它会返回一个函数,从概念上讲就是
然后柯里化中间函数并创建了函数f1(y)
和f2(z)
,即
对f(x)
函数进行求值会得到一个新函数f1
。如果提供了其他参数,则这些参数会传递给f1
函数用于求值,其结果可以是一个最终值,也可以是另一个函数。
显然,这种通过手动扩展实现柯里化的做法很容易出错,并不是处理函数的实用方法,但是可以用它来说明柯里化的含义以及它在Python中的实现方式。