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)

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

  • 相关阅读:
    HDU 1717 小数化分数2(最大公约数)
    C#计数器
    C#计数器
    c#计算器
    c#计算器
    PHP 错误与异常 笔记与总结(18 )页面重定向实现
    想使用 MongoDB ,你应该了解这8个方面!
    大数据代表未来,投资力度增强
    统计学和数据挖掘的异同探讨
    统计学和数据挖掘的异同探讨
  • 原文地址:https://www.cnblogs.com/cmustard/p/6769951.html
Copyright © 2011-2022 走看看