偏函数
当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单.
- int()
函数可以把字符串转换为整数,当仅传入字符串时,int()
函数默认按十进制转换:
print(int("12345")) # 12345
- 但int()
函数还提供额外的base
参数,默认值为10
。如果传入base
参数,就可以做N进制的转换:
print(int("12345",base=8)) # 5349 print(int("12345",base=16)) # 74565
- 假设要转换大量的二进制字符串,每次都传入int(x, base=2)
非常麻烦,于是,我们想到,可以定义一个int2()
的函数,默认把base=2
传进去:
def int2(x,base=2): return int(x,base) print(int2("1000000")) # 64 print(int2("1010101")) # 85
- functools.partial就是帮助我们创建一个偏函数,不需要我们自己定义int2(),可以直接使用下面的代码创建一个新的函数int2:
from functools import partial int2 = partial(int,base=2) print(int2("1000000")) # 64
# 上面的int2函数,仅仅是吧base参数重新定默认值为2,但也可以在函数调用时传入其他值
- 所以,functools.partial 的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单.
- 创建偏函数时,实际上可以接受函数对象,*args,**kwargs这三个参数
max = partial(max,10) print(max(5,6,7)) # 10 # 相当于 args = (10,5,6,7) max(*args)