中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么在Python中使用getattr函數實現一個分發模式

發布時間:2021-03-29 17:08:51 來源:億速云 閱讀:229 作者:Leah 欄目:開發技術

怎么在Python中使用getattr函數實現一個分發模式?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。

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

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

import statsout

def 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 能夠使用可選的第三個參數,一個缺省返回值。

看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长寿区| 永嘉县| 牙克石市| 平山县| 江源县| 琼中| 叙永县| 闽侯县| 大石桥市| 班戈县| 金沙县| 青冈县| 高碑店市| 荃湾区| 天台县| 蒲城县| 常州市| 醴陵市| 普洱| 读书| 夏津县| 昭平县| 许昌县| 曲松县| 霍城县| 千阳县| 宁城县| 康保县| 巍山| 维西| 广州市| 龙海市| 安义县| 横峰县| 化德县| 玛纳斯县| 盐亭县| 普陀区| 阿瓦提县| 涪陵区| 镇沅|