欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式

 更新時間:2018年01月22日 10:43:09   作者:longzhiwen888  
這篇文章主要介紹了淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下

本文研究的主要是使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式的相關(guān)問題,具體介紹如下。

getattr 常見的使用模式是作為一個分發(fā)者。舉個例子,如果你有一個程序可以以不同的格式輸出數(shù)據(jù),你可以為每種輸出格式定義各自的格式輸出函數(shù),然后使用唯一的分發(fā)函數(shù)調(diào)用所需的格式輸出函數(shù)。

例如,讓我們假設(shè)有一個以 HTML、XML 和普通文本格式打印站點統(tǒng)計的程序。輸出格式在命令行中指定,或者保存在配置文件中。statsout 模塊定義了三個函數(shù):output_html、output_xml output_text。然后主程序定義了唯一的輸出函數(shù),如下:

import statsout

def output(data, format="text"):               
  output_function = getattr(statsout, "output_%s" % format) 
  return output_function(data)     

output 函數(shù)接收一個必備參數(shù) data,和一個可選參數(shù) format。如果沒有指定 format 參數(shù),其缺省值是 text 并完成普通文本輸出函數(shù)的調(diào)用。

你可以連接 format 參數(shù)值和 "output_" 來創(chuàng)建一個函數(shù)名稱作為參數(shù)值,然后從 statsout 模塊中取得該函數(shù)。這種方式允許今后很容易的擴展程序以支持其它的輸出格式,而且無需修改分發(fā)函數(shù)。所要做的僅僅是向 statsout 中添加一個函數(shù),比如 output_pdf,之后只要將 “pdf” 作為 format 的參數(shù)值傳遞給 output 函數(shù)即可。

現(xiàn)在你可以簡單的調(diào)用輸出函數(shù)就像調(diào)用其它函數(shù)一樣了。output_function 變量是指向 statsout 模塊中相應(yīng)函數(shù)的引用。

你是否發(fā)現(xiàn)前面示例的一個 Bug?即字符串和函數(shù)之間的松耦合,而且沒有錯誤檢查。如果用戶傳入一個格式參數(shù),但是在 statsout 中沒有定義相應(yīng)的格式輸出函數(shù),會發(fā)生什么呢?還好,getattr 會返回 None,它會取代一個有效函數(shù)并被賦值給 output_function,然后下一行調(diào)用函數(shù)的語句將會失敗并拋出一個異常。這種方式不好。值得慶幸的是,getattr 能夠使用可選的第三個參數(shù),一個缺省返回值。

總結(jié)

以上就是本文關(guān)于淺談使用Python內(nèi)置函數(shù)getattr實現(xiàn)分發(fā)模式的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

最新評論