Python中的函数柯里化
添加时间:2013-7-19 点击量:
Python中的函数柯里化
1 柯里化(Currying)
一个函数有多个参数,我们能固定此中几个参数的值。
functools import partial
def foo(a,b,c):
return a+b+c
foo2 = partial(foo, b=2)
foo2(a=1, c=3)
#=>6
看上去这跟供给参数默认值的景象类似。但默认值只能固定
为单个值,而柯里化能经由过程泛化出很多个函数,每个函数用
不合的固定值,来看一下 应用处景 :
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中的函数柯里化
1 柯里化(Currying)
一个函数有多个参数,我们能固定此中几个参数的值。
functools import partial
def foo(a,b,c):
return a+b+c
foo2 = partial(foo, b=2)
foo2(a=1, c=3)
#=>6
看上去这跟供给参数默认值的景象类似。但默认值只能固定
为单个值,而柯里化能经由过程泛化出很多个函数,每个函数用
不合的固定值,来看一下 应用处景 :
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。
- 那么反柯里化有什么用?
一些函数式编程说话,就是哄骗反柯里化来实现多参数函数。
至于还能用在什么处所,本人也不知道,只是作为爱好懂得一下。
我所有的自负皆来自我的自卑,所有的英雄气概都来自于我的软弱。嘴里振振有词是因为心里满是怀疑,深情是因为痛恨自己无情。这世界没有一件事情是虚空而生的,站在光里,背后就会有阴影,这深夜里一片寂静,是因为你还没有听见声音。—— 马良《坦白书》