国产探花免费观看_亚洲丰满少妇自慰呻吟_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
點擊查看我的其它博客地址


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 河池市| 西林县| 铜鼓县| 凉山| 新乐市| 阿拉善右旗| 双辽市| 阿鲁科尔沁旗| 鄂伦春自治旗| 布尔津县| 太仆寺旗| 焦作市| 崇左市| 溆浦县| 大洼县| 广德县| 西乌珠穆沁旗| 来宾市| 宁城县| 新龙县| 霍州市| 宜川县| 顺平县| 射洪县| 紫阳县| 东光县| 罗山县| 江华| 桦甸市| 西青区| 耒阳市| 宿迁市| 古交市| 汾西县| 会理县| 扬中市| 庄河市| 临泉县| 临沭县| 临澧县| 汤原县|