1. 什么是偏函数

例如:python当中的int函数能够设定base值将输入的值按照base指定的进制转化成十进制数,默认base=10。

将八进制数12345转化成十进制数为5349
>>> int('12345', base=8)
5349

将16进制数12345转化为十进制数为74565
>>> int('12345', 16)
74565

若需要大量的二进制数转化成十进制:

>>>int('10010',2)
>>>int("1000",2)
...

此时每次调用都要设定参数为2,十分的麻烦。默认参数有时候虽然能解决,但是只能设定一个默认参数值。这时候需就可以使用偏函数来完成此项功能!

```python
>>> import functools
>>> int2 = functools.partial(int, base=2)
>>> int2('1000000')
64
>>> int2('1010101')
85

2. 偏函数的设计缘由

偏函数的设计是为了将某些函数的某些参数固定住,从而将其部分功能分离出来独立使用,使得函数的功能更加集中和明确。

3. 偏函数的应用例子

如果int的例子还没能让你体会到使用偏函数的必要性,那么就再来看下这个例子:
在GUI程序中,一个控件往往有很多参数:大小、长度、最大尺寸、前景色、背景色等;而我们大量用到同种控件,此时,偏函数就非常有用了。下面给出一个GUI应用的例子和结果:

#!/usr/bin/python
from functools import partial
import Tkinter
root=Tkinter.Tk()
#通过定义偏函数,我分离出来了一个固化的一个按钮(蓝色底色的按钮)
mybutton=partial(Tkinter.Button,root,fg='white',bg='blue')
b1=mybutton(text='Button1')
b2=mybutton(text='Button2')
qb=mybutton(text='QUIT',bg='red',command=root.quit)
b1.pack()
b2.pack()
qb.pack(fill=Tkinter.X,expand=True)
root.title('PAF!')
root.mainloop()