代码改变世界

转:python中函数curry化

2013-07-20 03:35  youxin  阅读(1624)  评论(0编辑  收藏  举报

1 柯里化(Currying)

一个函数有多个参数,我们希望能固定其中几个参数的值。

from functools import partial
def foo(a,b,c):
    return a+b+c

foo2 = partial(foo, b=2)
foo2(a=1, c=3)
#=>6

看上去这跟提供参数默认值的情况类似。但默认值只能固定 
为单个值,而柯里化能通过泛化出很多个函数,每个函数用 
不同的固定值,来看一下 应用场景 : 

from functools import partial
bin2dec = partial(int, base=2)
hex2dec = partial(int, base=16)

原int方法的定义为:int( x[, base]),base参数的默认为10 
经过柯里化之后,可以用如下方式调用: 

int('15') #=>15  using default base 10
bin2dec('01011') #=>11
hex2dec('67') #=>103

2 反柯里化(Uncurrying)

顾名思义,柯里化的逆过程。 
将多个只含单个参数的函数模拟成一个多参数函数。 

def foo(a):
    def bar(b):
        return a+b
    return bar

你可以像这样调用:foo(1)(4)或(foo(1))(4),都能得到正确的结果5。

  • 那么反柯里化有什么用?

一些函数式编程语言,就是利用反柯里化来实现多参数函数。 
 

转自:http://www.tuicool.com/articles/VFVBNf