Python2 —-函数字典的使用

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错
问题背景:

最近在用python2为sublime2写一个插件,其中有一个命令功能,就是输入不同的命令调用不同的函数,但是python不支持switch,只用ifelse的话感觉特别的low而且明显不是好的设计:如果要新增一个命令,就要先写完函数以后再在ifelse里面新增一行,不仅增加了代码的工作量,而且也不是良好的结构设计,所以我想到了python的函数名__name__,能不能用函数名来实现自动查找相应函数去调用呢?

一般的想法是利用getattr,将函数装到类里面去,就像这样:
>>>class testClass(): 
…  def funcA(self,name): 
…   print ‘funcA’+name
…  
…  def funcB(self):
…   print ‘funcB’ 
… 
… 
>>>t = testClass() 
>>>a = getattr(t,’funcA’,None) 
>>>b = getattr(t,’funcB’,None) 
>>>a(‘name’)
‘funcAname’ 
>>>b()
‘funcB’

——————————————————————————–

这样就可以轻松实现工厂模式,但是这样做有个弊端就是我们并不能够动态的管理所有命令,而且有些命令指向同一个函数,这样做也会使函数的管理变得很不方便,而且需要对类管理,每次更新文档,我们都要重复的去修改文档中的内容,于是想到了python的另一个强大的功能:字典
字典里可以存储函数,这样只需要查找字典中的全部值再加上函数强大的__doc__就可以方便的对函数与文档进行维护,而且易于查找的函数字典可以更方便更灵活的对函数进行操作
具体示例代码如下:
def commandA(name): 
 ‘commandA is for testA’ 
 print name 

def commandB(): 
 ‘commandB is for testB’ 
 print ‘hello world’ 
 
 
command = {‘commandA’:commandA,’commandB’:commandB} 

command[‘commandA’](‘testA’) 
command[‘commandB’]() 

def show_doc(): 
 for func in command.values(): 
  print func.__doc__ 

def commandf(commandstr,params = []):
 func = command[commandstr]
 if None != func:
  func(params)

——————————————————————————–

当然这样也不完善,因为要手动维护一个dict,但是比起文档的麻烦来说,已经好太多了,而且有很重要的一点是,这样的函数不用写self参数,短了不少……

无需操作系统直接运行 Python 代码  http://www.linuxidc.com/Linux/2015-05/117357.htm

CentOS上源码安装Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Ubuntu下用Python搭建桌面算法交易研究环境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 语言的发展简史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的详细介绍请点这里
Python 的下载地址请点这里

未经允许不得转载:演道网 » Python2 —-函数字典的使用

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册