前言
偏函数是将所要承载的函数作为partial()函数的第一个参数,原函数的各个参数依次作为partial()函数后续的参数,除非使用关键字参数。
例1
自定义函数时,我们可以通过设定参数的默认值,可以降低函数调用的难度,而偏函数也可以做到这一点。举例如下:
int()函数可以把字符串转换为整数,当仅传入字符串时,int()函数默认按十进制转换;同时,int()函数还有额外的base参数,默认值为10,如果传入base参数,就可以做N进制的转换:
# 不传入base参数
print('默认按十进制进行转换:',int('1234'))
# 传入base参数,base=2
print('按二进制进行转换:',int('1000000',base=2))
输出结果:
默认按十进制进行转换: 1234
按二进制进行转换: 64
假设要转换大量的二进制字符串,每次都传入int(x, base=2)非常麻烦,于是,我们想到,可以定义一个int2()的函数,默认把base=2传进去:
例1:使用自定义函数实现
def int2(x,base=2):
return int(x,base)
print(int2('1000000'))
print(int2('1010101'))
输出结果:
64
85
例2:使用偏函数实现
import functools
int2=functools.partial(int,base=2)
print(int2('1000000'))
输出结果:
64
总结
创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数。
当传入:
int2 = functools.partial(int, base=2)
实际固定了关键字参数base=2:
int2('1000000') #base参数=2,输出结果:64
当传入参数非关键字参数时:
max2 = functools.partial(max, 10)
实际上会把10作为参数的一部分自动加到左边,也就是:
import functools
max2 = functools.partial(max, 10)
print(max2(5, 6, 7)) # 输出结果10
# 相当于max(10, 5, 6, 7)
print(max(10, 2, 5, 7)) # 输出结果也是10
最后:当函数的参数个数太多,为方便参数调用,可使用使用functools.partial创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。
Post Views:
8