偏函数
语法:partial(fuc,*args,**keywords)
说明:fuc是一个函数,这个函数可以是自定义函数,也可以是python内置函数;*args是可变参数;**keywords是一个关键字参数
偏函数就是某一种函数带有固定参数的实现,使用偏函数,可以有效的固定预先确定的参数来缓存函数参数,然后在函数运行时获得需要的剩余参数,最后将缓存的函数参数释放并传递到最终的参数中,从而使用最终确定的所有参数去调用函数。
下面通过几个例子理解
一:
partial函数的作用就是将所作用的函数作为partial 函数的第一个参数,原函数的各个参数依次作为partial函数的后续参数,原函数有关键字参数的一定要带上关键字没有则按原有参数顺序进行补充。
例.进制的转换
int_tran = partial(int,base=16) #转换成整数,此处关键字参数为16,即16进制表示
print(int_tran('100')) #100为16进制
print(int_tran('100',base=10)) #100为10进制
结果为:
256
100
二:
partial的作用就是把一个函数的某些参数固定住(设置默认值),返回一个新的函数,调用这个新函数就会变得更简单。
偏函数应用的关键是接收函数对象的* args和** keywords参数。其中,对偏函数参数的第二个部分(可变参数),按原有函数的参数顺序进行补充,参数将作用在原函数上,最后偏函数返回一个新函数。
例.定义一个sum函数,参数为* args可变,计算这些可变参数的乘积。普通函数的实现方法如下:
def mult( * args):
m= 1
for n in args:
m=m*n
return m
#直接调用
print(mult(3,5,6,9))
要在此基础上在继续乘以15,20甚至更多,有如下方法:
- 直接使用mult
print(mult(3,5,6,9)*mult(15,20))
- 使用偏函数
#偏函数返回15和20.分别作用在u的第一个参数和第二个参数的位置形成新函数import functools
print(mult(3,5,6,9)*mult(15,20))
result= partial(mult, 15,20)
print(result(3,5,6,9))
三:
对偏函数的第三个部分(关键字参数) ,按原有函数的关键字参数进行填补,参数将作用在原函数上最后偏函数返回一个新函数。
#求列表中大于给定值的数据个数,m位于*后面表示关键字参数,默认取值为10
def max_list(ls,*,m=10):
t=0
for i in ls:
if i>m:
t=t+1
return t
#通过偏函数构建了一个新函数,新函数的第三个关键字参数默认取值为5
new_func = partial(max_list,m=5)
#调用原函数,求大于m的值的个数个
print(max_list([2,6,5,8]))
#调用偏函数,判断的是大于5的数的个数
print(new_func([2,6,5,8]))
结果:
0
2
可以看到运用偏函数可以在一定程度上简化原函数的参数,用 partial可以创建一个新的函数,该新函数可以固定原函数的部分参数,从而保证函数在调用时更简单。