Python中的函数柯里化

Python中的函数柯里化

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。

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

一些函数式编程语言,就是利用反柯里化来实现多参数函数。
至于还能用在什么地方,本人也不知道,只是作为兴趣了解一下。

 


你可能感兴趣的:(Python中的函数柯里化)