zoukankan      html  css  js  c++  java
  • 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)

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

  • 相关阅读:
    卸载了PL/SQL Developer,说一下与Toad for Oracle的对照
    列举游戏开发过程中的一些不良现象
    vue23:vue-loader
    vue22 路由
    vue21 slot占位
    vue20 父子组件数据交互
    vue19 组建 Vue.extend component、组件模版、动态组件
    vue18 动画
    vue17 $watch 监听数据变化
    vue16 自定义键盘属性
  • 原文地址:https://www.cnblogs.com/cmustard/p/6769951.html
Copyright © 2011-2022 走看看