偏函数
functools
提供的极有用的功能之一。通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。
设定参数的默认值的正常写法
print(int('11',base=2))
def int2(s,base=2):
return int(s,base)
print(int2('11'))
但是有了functools
提供的functools.partial
,我们就能轻松做到这一点。
int2 = functools.partial(int, base=2)
创建偏函数时,实际上可以接收函数对象、*args
和**kw
这3
个参数,当传入刚刚的参数时,实际上固定了int()
函数的关键字参数base
。相当于
kw = { 'base': 2 }
int('10010', **kw)
因为base=2作为参数是一个kw
。这在函数参数那边讲过。
当传入:
max2 = functools.partial(max, 10)
实际上会把10
作为*args
的一部分自动加到左边,也就是:
max2(5, 6, 7)
相当于
args = (10, 5, 6, 7)
max(*args)
结果是10
.
当函数的参数个数太多,需要简化时,使用functools.partial
可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。