国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

python2----函數字典的使用

2019-11-14 17:07:14
字體:
來源:轉載
供稿:網友

問題背景:

最近在用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)

如果要新增命令,只需要寫:

def newcommand():           print 'newcommand'     command['newcommand'] = newcommand

當然這樣也不完善,因為要手動維護一個dict,但是比起文檔的麻煩來說,已經好太多了,而且有很重要的一點是,這樣的函數不用寫self參數,短了不少……

關于getattr部分,請參考這里
關于__doc__的部分,請參考這里

@ Sprout

email
點擊查看我的其它博客地址


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 开封县| 泾源县| 酉阳| 灵台县| 盐源县| 始兴县| 淮南市| 罗平县| 湾仔区| 玉门市| 左贡县| 云南省| 英山县| 桂阳县| 哈尔滨市| 太原市| 砚山县| 浙江省| 迁安市| 宣威市| 灵丘县| 南澳县| 久治县| 龙州县| 肃宁县| 延津县| 灵台县| 综艺| 曲沃县| 新泰市| 乐业县| 南郑县| 将乐县| 内黄县| 漳平市| 镇雄县| 天长市| 曲麻莱县| 肥城市| 兴文县| 昔阳县|