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

首頁 > 編程 > Python > 正文

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

2020-01-04 16:03:18
字體:
供稿:網(wǎng)友

本文研究的主要是使用Python內(nèi)置python/292045.html">python/288845.html">python/282076.html">函數(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_htmloutput_xml output_text。然后主程序定義了唯一的輸出函數(shù),如下:

import statsoutdef 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)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖江市| 绵竹市| 黑山县| 灌南县| 安塞县| 广德县| 临西县| 大同县| 和龙市| 澄江县| 扶风县| 梧州市| 淮滨县| 牟定县| 夹江县| 钟山县| 绥化市| 甘泉县| 阿拉善右旗| 徐州市| 黔西县| 达拉特旗| 无锡市| 长丰县| 南平市| 许昌县| 乐业县| 丰原市| 武强县| 牡丹江市| 新疆| 汕头市| 黄石市| 泗水县| 宁化县| 英吉沙县| 句容市| 阿拉善右旗| 宜丰县| 浏阳市| 宜昌市|