python偏函数应用

     函数的currying(柯里化:一个函数有多个参数,我们希望能固定其中几个参数的值。看上去这跟提供参数默认值的情况类似。但默认值只能固定 为单个值,而柯里化能通过泛化出很多个函数,每个函数用 不同的固定值)的概念将函数式编程的概念和默认参数的以及可变参数结合在了一起。currying能够泛化成为PAF
       PFA(partial funcation application)偏函数这种函数将任意数量(顺序)的参数的函数转化成另一个剩余参数的函数对象。

简单来说, 偏函数就是把一个函数的某些参数给固定住(相当于将这些值设置默为认值),然后返回一个新的函数,我们调用这个新函数后会变得更加简洁,方便。

>>> from operator import add,mul
>>> from functools import partial
>>> add1=partial(add,1)       #add1(x)==add(1,x)
>>> mul100=partial(mul,100)   #mul100(x)==mul(100,x)
>>> add1(10)        #1+10
11
>>> mul100(10)    #100*10
1000

当调用带许多参数的函数的时候,PAF是最好的方法。
简单的GUI类的例子
from functools import partial
import Tkinter

root=Tkinter.Tk()
Mybutton=partial(Tkinter.Button,root,fg='white',bg="blue")
b1=Mybutton(text='Button 1')
b2=Mybutton(text="Button 2")
qb=Mybutton(text="QUIT",bg="red",command=root.quit)
b1.pack()
b2.pack()
qb.pack(fill=Tkinter.X,expand=True)
root.title("PFAs")
root.mainloop()

在7~8行,我们给TKinter.Button创建了“部分实例化器”,固定好父类的窗口参数然后是前景色和背景色。我们创建了两个按钮b1和b2来与模块匹配,只让文本标签唯一。
如果没有MyButton“模版”的话,我们每次不得不使用“完全的语法”
b1=Tkinter.Button(root,fg='white',bg='blue',test='Button 1')
b2=Tkinter.Button(root,fg='white',bg='blue',test='Button 2')
b2=Tkinter.Button(root,fg='white',bg='blue',test='Quite',command=root.quit)

通过对比,我们可以发现,通过偏函数就可以重复的代码省去。让代码变得更加紧凑和易读。

原文地址:https://www.cnblogs.com/cmustard/p/6769951.html