Python的functools
模块提供了很多有用的功能,其中一个就是偏函数(Partial function)。
偏函数是将所要承载的函数作为 partial() 函数的第一个参数,原函数的各个参数依次作为 partial() 函数的后续参数,除非使用关键字参数。
通过设定参数的默认值,可以降低函数调用的难度。而偏函数也可以做到这一点。
int()
函数可以把字符串转换为整数,当仅传入字符串时,int()
函数默认按十进制转换:
>>> int('123466')
123466
但int()
函数还提供额外的 base
参数,默认值为10
。如果传入 base
参数,就可以做 N 进制的转换:
>>> int('10' ,base =16)
16
>>>
>>>
>>> int('10' ,base =2)
2
假设要转换大量的二进制字符串,每次都传入int(x, base=2)
非常麻烦,于是,我们想到,可以定义一个int2()
的函数,默认把base=2
传进去:
functools.partial
就是帮助我们创建一个偏函数的,不需要我们自己定义 int2()
,可以直接使用下面的代码创建一个新的函数int2
:
>>> import functools
>>>
>>> int2 = functools.partial( int ,base = 2)
>>>
>>> int2('1010')
10
>>> int2('1001')
9
>>> int2('1010',base = 10)
1010
functools.partial
的作用就是,把一个函数的某些参数给固定住(也就是设置默认值),返回一个新的函数。
int2
函数仅仅是把 base
参数重新设定默认值为 2
,但也可以在函数调用时传入其他值。
【例】实现整数 100 对不同数 m 的 100%m 的取余函数。
>>> def modn(n,m):
... return n%m
...
>>>
>>> mod100 = partial( modm ,100)
>>>
>>>
>>> mod100( 7)
2
>>> modm(100, 7)
2
>>> mod100( 12)
4