歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

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

問題背景:

最近在用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 的下載地址:請點這裡

Copyright © Linux教程網 All Rights Reserved