python偏函数实例

偏函数在Python 2.5 版本中添加进来,是函数式编程一系列重要改进中的一部分。使用偏函数,可以通过有效地“冻结”那些预先确定的参数来缓存函数参数,然后在运行时,当获得需要的剩余参数后,可以将它们解冻,传递到最终的参数中,从而使用最终确定的所有参数去调用函数。

偏函数最好的一点是它不只局限于函数。偏函数可以用于可调用对象(任何包括函数接口的对象),只需要通过使用圆括号即可,包括类、方法或可调用实例。对于有很多可调用对象,并且许多调用都反复使用相同参数的情况,使用偏函数会非常合适。


GUI編程是一个很好的偏函数用例,因为你很可能需要GUI控件在外观上具有一致性,而这种一致性来自于使用相同参数创建相似的对象。我们现在要实现一个应用,这个应用中有很多按钮有相同的前景色和背景色,对于这种只有细微差别的按钮,使用相同的参数创建相同的实例简直是一种浪费:前景色和背景色都是相同的,只有文本有点不同。

交通路标示例:

# encode utf-8
from functools import partial as pto
import tkinter as tk
from tkinter.messagebox import showinfo, showwarning, showerror

WARN = 'warn'
CRIT = 'crit'
REGU = 'regu'

SIGNS = {
    'do not enter': CRIT,
    'railroad crossing': WARN,
    'SS\nspeed limit': REGU,
    'wrong way': CRIT,
    'merging traffic': WARN,
    'one way': REGU
}
 
critCB = lambda: showerror('Error', 'Error Button Pressed')           #showerror, showwarnning showinfo 是tkinter自带的函数  ,我们用lambda 把函数赋值   
warnCB = lambda: showwarning('Warnning', 'Warnning Button Pressed')
infoCB = lambda: showinfo('info', 'Info Button Pressed')

top = tk.Tk()
top.title('Road Signs')
MyButton = pto(tk.Button, top)
CritButton = pto(MyButton, command=critCB, bg='white', fg='red')     #偏函数式編程
WarnButton = pto(MyButton, command=warnCB, bg='goldenrod1')
ReguButton = pto(MyButton, command=infoCB, bg='white')
quit = tk.Button(top, command=top.quit, text='QUIT').pack(fill=tk.X, expand=True)
for eachSign in SIGNS:
    signType = SIGNS[eachSign]
    cmd = '%sButton(text=%r%s).pack(fill=tk.X, expand=True)' % (   #把命令变成字符串,对于不同的按钮进行modification
        signType.title(), eachSign,
        '.upper()' if signType == CRIT else '.title()')
    eval(cmd)                                                #利用eval ,运行字符串

tk.mainloop()

当我们运行这个程序时,会出现如下画面:

点击WRONG WAY按钮:

 

转载于:https://www.cnblogs.com/francischeng/p/9553646.html

CCF大数据与计算智能大赛-面向电信行业存量用户的智能套餐个性化匹配模型联通赛-复赛第二名-【多分类,embedding】.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值