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

首頁 > 編程 > Python > 正文

淺談使用Python內置函數getattr實現分發模式

2020-02-22 22:56:12
字體:
來源:轉載
供稿:網友

本文研究的主要是使用Python內置函數getattr實現分發模式的相關問題,具體介紹如下。

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

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

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

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

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

現在你可以簡單的調用輸出函數就像調用其它函數一樣了。output_function 變量是指向 statsout 模塊中相應函數的引用。

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

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 临桂县| 石林| 高碑店市| 祁连县| 嘉峪关市| 沐川县| 通道| 凌源市| 阿坝| 巴彦县| 北碚区| 岑巩县| 蓝田县| 巴楚县| 中江县| 蓬安县| 同江市| 石渠县| 新宾| 澎湖县| 南阳市| 泸州市| 阿拉善左旗| 黄大仙区| 兴城市| 民权县| 嵊州市| 泸溪县| 淳化县| 西乌珠穆沁旗| 阿克苏市| 叶城县| 吉木乃县| 德保县| 阳东县| 如皋市| 凤庆县| 阜新| 彝良县| 繁峙县| 白山市|