偏函数(partial function)简单来讲就是将一个已知函数的某些参数的默认值给设定好,返回一个新的函数以方便于随时调用。
例如:int('123')
是将123默认为十进制数进行转化为十进制数输出,即int('123',base=10)
,输出结果为123
;
当我们需要将默认为十六进制的数转化为十进制数输出就可以将int()函数的参数base的传入值改为16即int('123',base=16)
就可以了(base关键字可省略),输出结果为291
;
但如果我们要进行大量的转化就需要每次都传入两个参数int(x,base=16)
就会比较麻烦,于是偏函数就派上用场了:
import functools
int16 = functools.partial(int, base=16)
print(int16('123'))
结果:291
实际上就是重新设定了int()函数的关键字参数base,将其默认为16,所以在调用新函数时,也可以传入其它值:
print(int16('123', base=10))
结果:123
创建偏函数时接受函数对象、*args(可选参数),**kw(关键字参数),当传入int2 = functools.partial(int, base=2)
时,实际上固定住了int()函数的关键字参数base,即int2('110')
相当于
kw = {'base' : 2}
int('110', **kw)
另一个例子:
import functools
max6 = functools.partial(max,6)
print(max6(1,2,3,4))
相当于:
args = (6,1,2,3,4)
print(max(*args))
结果:
6